我还是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()”第一次运行,但从未再次运行。
答案 0 :(得分:114)
你在这里遇到了几个问题。
首先,您要在anonymous function内定义代码。这个结构:
(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() { ... }
缩短的阻止形式,而不是在setTimeout()
内调用update()
,而只需使用setInterval()
:
$(function() {
setInterval(update, 1000);
});
function update() {
$("#board").append(".");
}
希望能够解决这个问题。
答案 1 :(得分:20)
setInterval(function() {
$('#board').append('.');
}, 1000);
如果您想在某一点停止,可以使用clearInterval。
答案 2 :(得分:8)
SetTimeout用于使您的代码集在指定的时间段后执行,因此对于您的要求,最好使用setInterval,因为每次都会在指定的时间间隔调用您的函数。
答案 3 :(得分:0)
这实现了同样的目的,但更简单:
$(document).ready(function() {
$("#board").delay(1000).append(".");
});
您可以在几乎任何jQuery方法之前链接延迟。