我还是个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()“第一次运行,但再也不会运行。
发布于 2009-09-30 02:57:15
这里有几个问题。
首先,你在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() { ... }
缩短的代码块形式,而不是在update()
中调用setTimeout()
,您可以直接使用setInterval()
:
$(function() {
setInterval(update, 1000);
});
function update() {
$("#board").append(".");
}
希望这能澄清这一点。
发布于 2009-09-30 02:58:19
setInterval(function() {
$('#board').append('.');
}, 1000);
如果你想在某一时刻停止它,你可以使用clearInterval。
发布于 2009-12-22 12:43:00
SetTimeout用于使您的代码集在指定的时间段后执行,因此对于您的需求,最好使用setInterval,因为它将在指定的时间间隔内每次调用您的函数。
https://stackoverflow.com/questions/1495903
复制相似问题