jquery setInterval不起作用

时间:2010-01-15 17:19:12

标签: javascript jquery setinterval

HTML:

<div id="coin1"></div>

JS:

 $(document).ready(function(){

   function changeImage(){


if($("#coin1").css("display") == "none"){  
$("#coin1").fadeIn("slow");
}else{  
$("#coin1").fadeOut("slow");
}
};





       setInterval ( "changeImage()", 2000 );
});

我无法让它工作......如果我只是做changeImage();它工作正常,但我想让setInterval工作..任何想法?

2 个答案:

答案 0 :(得分:5)

因为您在changeImage()中定义$(document).ready(),所以它不是全局定义的,因此不会被setInterval调用。请改用函数的名称,即:

setInterval(changeImage, 2000);

希望这有帮助。

答案 1 :(得分:1)

请保持清晰,因为接受的答案确实显示了正确的代码,但说明不正确,问题不在于此:

...您正在changeImage()中定义$(document).ready() ...

完全可以在$(document).ready()范围内定义函数。

问题是您要传递一个字符串– setInterval("changeImage()", 2000); –作为setInterval()的第一个参数,而不是将函数用作回调。根据接受的答案的代码(但不是解释),正确使用setInterval()的方式类似于setInterval(changeImage, 2000);。请注意,此处未使用括号。这是因为您想将函数本身作为参数传递,而不是调用函数时返回的任何值。

将代码移至$(document).ready()范围之外时,所用代码起作用的唯一原因是,当您传递字符串时,解释器被迫运行eval()针对字符串,则eval()发生在全局范围内。

因此,使解决方案与字符串配合使用是可能的,但这并不是很好的编码。为setInterval()the docs

可选语法允许您包括一个字符串而不是一个函数,该函数每延迟一毫秒就会编译和执行一次。出于与使用eval()的安全风险相同的原因,不建议使用此语法