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工作..任何想法?
答案 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()
的安全风险相同的原因,不建议使用此语法。