Javascript 仅在指定对象位于页面上时运行脚本

Javascript 仅在指定对象位于页面上时运行脚本,javascript,jquery,html,Javascript,Jquery,Html,我有一些多年前写的javascript。我刚刚注意到,它在控制台中的每个页面上都会抛出错误,而对象没有包含在其中。我会犯一些错误,比如 无法读取未定义类型的属性“top”错误:无法读取 未定义的属性“top” 及 未捕获的TypeError:无法读取未定义的属性“top” 在placeLines(main.js:276) 在HTMLDocument。(main.js:299) 在j处(jquery-3.1.1.min.js:2) 在k处(jquery-3.1.1.min.js:2) 我正在运行的

我有一些多年前写的javascript。我刚刚注意到,它在控制台中的每个页面上都会抛出错误,而对象没有包含在其中。我会犯一些错误,比如

无法读取未定义类型的属性“top”错误:无法读取 未定义的属性“top”

未捕获的TypeError:无法读取未定义的属性“top” 在placeLines(main.js:276) 在HTMLDocument。(main.js:299) 在j处(jquery-3.1.1.min.js:2) 在k处(jquery-3.1.1.min.js:2)

我正在运行的javascript如下所示:

$(function(){
    placeLines = function(){

        for(i=0; i<=9; i++){
            var Dy = $('.ball-container'+i).position().top - $('.ball-container'+(i+1)).position().top;
            var Dx = $('.ball-container'+(i+1)).position().left - $('.ball-container'+i).position().left;
            var length = Math.sqrt(Dy*Dy + Dx*Dx);
            var angle = Math.atan2(Dy, Dx) * (-1);
            var containerHeight = $('#animated-line > .inner').height();
            var transform = 'rotate('+angle + 'rad)';
            $('.line'+i).css({
                'transform': transform
            })

            var offsetTop = $('.ball-container'+i).offset().top +6;
            var offsetLeft= $('.ball-container'+i).offset().left +6;

            $('.line-box'+i).css({
                'width': length +'px'
                }).offset({
                left: offsetLeft,
                top: offsetTop
            });
        }
    };

    $(document).ready(function(){
        placeLines();
    });

    $(window).resize(function(){
        console.log('resizing');
        placeLines();
    });
});
$(函数(){
placeLines=函数(){

对于(i=0;i编辑:我不知道你的意思是想检查页面上是否存在该对象。我建议检查Andy在你帖子的评论中提到的检查

如果($('#动画行').length>0)
可以作为
placeLines()
函数的第一行。那么它只会在函数存在的情况下实际执行。或者,在
$(文档).ready
$(窗口)。resize
中,可以进行上述检查;我只是尝试避免重复检查


另请参见:

假设所有球形容器存在或不存在,则更改

$(document).ready(function(){
    placeLines();
});

$(window).resize(function(){
    console.log('resizing');
    placeLines();
});


“我刚刚注意到,它在控制台中的每一页上都会抛出错误,而这一页上没有包含它。”如果它没有包含在页面上,它怎么会抛出错误呢?在每个页面上,该对象都没有包含在HTML中。因此脚本运行并查找不存在的内容。因为它是一个通用JS文件,包含在每个页面上。啊,对象,而不是脚本。感谢您清除它。您可以检查
$(“#动画行”).length
如果是
0
就不要运行脚本。是的,很抱歉,我在写这篇文章时遇到了麻烦!谢谢你的回复。我替换了
$(文档)。ready(function(){/code>和
$('#动画行')。load(function(){
但是在控制台中我得到了一个新的错误,
a.indexOf不是r.fn.init.r.fn.load的函数
更新了,很抱歉我也被弄糊涂了-我认为问题是在加载对象之前执行代码,而不是对象在某些页面上不存在。是的,我在这方面做得不好。我已经尝试了这些方法,它们都有效,谢谢!哇t最好?我认为包装这两个函数可能是最好的,因为它们从来都不需要单独包装?我认为在这种情况下,包装这两个函数更有意义,因为这样你就不会在每个页面上调用函数(即使它什么都不做),但仅在包含函数作用对象的页面上。但我也认为这更多是个人偏好的问题:)
if ($('.ball-container0').length){ // check if ball containers exist and only then use the placeLines method

    $(document).ready(function(){
        placeLines();
    });

    $(window).resize(function(){
        console.log('resizing');
        placeLines();
    });
}