我仍然对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() { ... }
缩短的块形式,而不是setTimeout()
内部调用update()
只能使用setInterval()
代替:
$(function() {
setInterval(update, 1000);
});
function update() {
$("#board").append(".");
}
希望能解决这个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句