2

如果我只是这样做changeImage();,效果很好,但我不知道如何开始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);
});
4

2 回答 2

4

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

setInterval(changeImage, 2000);

希望这可以帮助。

于 2010-01-15T17:22:10.793 回答
1

为了清楚起见,因为接受的答案确实显示了正确的代码但解释不正确,所以问题不在于:

...您changeImage()$(document).ready()...内定义

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

问题是您传递一个字符串 – setInterval("changeImage()", 2000);– 作为第一个参数,setInterval()而不是用作回调的函数。根据接受的答案的代码(但不是解释),正确的使用方法setInterval()setInterval(changeImage, 2000);. 注意这里没有使用括号。这是因为您希望将函数本身作为参数传递,而不是函数在调用时返回的任何内容。

当您将其移出范围时,您使用的代码恰好可以工作的唯一原因$(document).ready()是,当您传递一个字符串时,解释器被迫eval()针对该字符串运行一个,并且eval()发生在全局范围内。

因此,虽然可以让解决方案与字符串一起使用,但它并不是很好的编码。根据文档setInterval():_

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

于 2020-10-30T13:56:36.103 回答