2

我只是想用 jQuery 实现 setInterval 的最基本示例并且遇到问题。这里有什么问题?

它说功能旋转未定义。

$(document).ready(function() {
    var speed = 5000;
    var run = setInterval("rotate()", speed);

    function rotate() {
        alert ('rotate');
    }
});
4

8 回答 8

6

改为这样做:

$(document).ready(function() {
    var speed = 5000;

    function rotate() {
        alert ('rotate');
    }

    var run = setInterval(rotate, speed);
});

你也可以简单地这样做:

$(function() {
    var speed = 5000;

    var run = setInterval(function() {
        alert ('rotate');
    }, speed);
});

如果您希望稍后能够清除间隔,则应该在就绪事件处理程序之外声明run,否则它将超出范围。

于 2011-02-02T15:44:20.120 回答
2

您正在将setInterval字符串传递给 eval。这是:

  • 难以调试
  • 低效
  • 丑陋
  • 在不同的范围内执行

该函数的范围仅限于它在内部定义的函数。

而是直接传递函数

    var run = setInterval(rotate, speed);
于 2011-02-02T15:46:29.767 回答
1

在 setInterval 调用中省略圆括号和引号。您给它的是功能本身,而不是名称。他们进入的顺序应该无关紧要。

于 2011-02-02T15:45:43.943 回答
1

这实际上是在(我相信是)它自己的上下文中评估轮换。将其更改为

var run = setInterval(rotate, speed);

应该没问题。

于 2011-02-02T15:46:09.443 回答
0

甚至将旋转功能放在就绪功能之外。

于 2011-02-02T15:45:10.577 回答
0

这行得通

$(document).ready(function() {
    function rotate() {
        alert ('rotate');
    }
    var speed = 5000;
    var run = setInterval(function() { rotate() }, speed);

});
于 2011-02-02T15:46:09.673 回答
0

您需要rotate在全局范围内定义。

$(document).ready(function() {
    window.rotate = function() {
        alert ('rotate');
    }
    var speed = 5000;
    var run = setInterval("rotate()", speed);
});
于 2011-02-02T15:46:39.913 回答
0
$(function() {
   var speed = 5000;
   var rotate = function() {
      alert("rotate");
   };

   window.setInterval(rotate, speed);
});
于 2011-02-02T15:49:34.410 回答