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方法之前链接一个延迟。