Javascript 仅在指定对象位于页面上时运行脚本
我有一些多年前写的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如下所示: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) 我正在运行的
$(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();
});
}