1

最近,我一直在研究一个错误很长时间。一段时间后,我设法找到了问题并解决了它,但我不明白为什么会出现错误。我做错了吗?

比如我的目录结构:
build
--index.html
--about.html
--contact.html
--app.js

因此,所有三个 HTML 文档都称为同一个外部 app.js 文件。

使用 jQuery,我有这个

$(document).ready(function(){ 

$('#img1').... // some other functions here. #img1 is only found in index.html


$('#foo').hide(); // hiding the div. #foo is in all the HTML files in the directory.

}

现在问题来了-> #foo 隐藏在 index.html 中,但没有隐藏在 about.html 和 contact.html 中

当我$('#img1')从 app.js 中删除 及其函数时,#foo 然后隐藏在所有三个 HTML 文件中。似乎由于找不到名为#img1 的id,脚本的其余部分是多余的about.htmlcontact.html

我设法通过$('#foo').hide();之前的工作来解决问题$('#img1')....

但是,我很好奇为什么会这样?如果找不到#img1 并继续执行下一个函数等,jquery 不应该不在乎吗?在这种情况下,这是否意味着我不能在一个 app.js 中缩小我的脚本?我是不是错过了什么。*PS 我不是 javascript 专业人士。

更新(8 月 31 日)-> 对不起,伙计们,我想我发现了这个问题。这与 Greensock 动画平台有关(仅时间轴)

var slide1 = document.getElementById('slide-1'),
slide2 = document.getElementById('slide-2'),
slide3 = document.getElementById('slide-3'),
slide4 = document.getElementById('slide-4'),
slide5 = document.getElementById('slide-5');

var slideArray = [slide1, slide2, slide3, slide4, slide5];

var tl = new TimelineLite({}),
    delayTiming = 2.5,
    fadeTiming = 2;

tl
.to(slideArray, 0, {opacity:0})
.to(slide2, fadeTiming, {opacity:1, delay:delayTiming})
.to(slide3, fadeTiming, {opacity:1, delay:delayTiming})
.to(slide4, fadeTiming, {opacity:1, delay:delayTiming})
.to(slide5, fadeTiming, {opacity:1, delay:delayTiming, onComplete:fadeOutLastSlide});

不知何故 tl 找不到 slideArray (或其子项),当它找不到任何元素并导致它下面的脚本不起作用时?

我应该删除这个帖子吗?

4

1 回答 1

3

您可以使用

if($('#img1').length){
    // code goes here
}

因此,只有在当前页面上有匹配的元素时才会发生该操作。此外,如果脚本中出现任何错误,整个脚本将停止工作。

于 2013-08-31T01:33:50.950 回答