jQuery,setTimeout不工作

我还是新来的JQuery,在让我的ajax例子工作的方式我被setTimeout停滞。 我已经把它分解到它应该添加的地方。“ 每秒钟到div。

相关的代码在两个文件中。

的index.html

<html><head> <script type='text/javascript' src='jquery.js'></script> <script type='text/javascript' src='myCode.js'></script> </head> <body> <div id='board'>Text</div> </body> </html> 

myCode.js

 (function(){ $(document).ready(function() {update();}); function update() { $("#board").append("."); setTimeout('update()', 1000); } })(); 

myCode.js文件工作正常,“update()”第一次运行,但不再运行。

这里有几个问题。

首先,你在一个匿名函数中定义你的代码。 这个构造:

 (function() { ... )(); 

做两件事。 它定义了一个匿名函数并调用它。 有范围的原因这样做,但我不知道这是你真正想要的。

你正在传递一个代码块给setTimeout() 。 问题是update()不在作用域内的时候。 但是,如果你传递一个函数指针,所以这个工作:

 (function() { $(document).ready(function() {update();}); function update() { $("#board").append("."); setTimeout(update, 1000); } } )(); 

因为函数指针update在该块的范围内。

但正如我所说,没有必要使用匿名函数,所以你可以像这样重写:

 $(document).ready(function() {update();}); function update() { $("#board").append("."); setTimeout(update, 1000); } } 

要么

 $(document).ready(function() {update();}); function update() { $("#board").append("."); setTimeout('update()', 1000); } } 

这两个工作。 第二个工作,因为代码块内的update()现在在范围内。

我也更喜欢$(function() { ... }缩短的块forms,而不是在update()调用setTimeout() ,你可以使用setInterval()来代替:

 $(function() { setInterval(update, 1000); }); function update() { $("#board").append("."); } 

希望能够解决这个问题。

 setInterval(function() { $('#board').append('.'); }, 1000); 

如果你想在一个点上停下来,你可以使用clearInterval。

SetTimeout用于使代码集在指定的时间段之后执行,所以为了满足您的需求,最好使用setInterval,因为每次以指定的时间间隔调用您的函数。

这完成了同样的事情,但更简单:

 $(document).ready(function() { $("#board").delay(1000).append("."); }); 

你几乎可以在任何jQuery方法之前链接一个延迟。