Bol*_*ead 50 javascript 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>
Run Code Online (Sandbox Code Playgroud)
和myCode.js
(function(){
$(document).ready(function() {update();});
function update() {
$("#board").append(".");
setTimeout('update()', 1000); }
})();
Run Code Online (Sandbox Code Playgroud)
myCode.js文件正常工作,"update()"第一次运行,但从未再次运行.
cle*_*tus 113
你在这里遇到了几个问题.
首先,您在匿名函数中定义代码.这个结构:
(function() {
...
)();
Run Code Online (Sandbox Code Playgroud)
做两件事.它定义了一个匿名函数并调用它.这样做的范围很广,但我不确定这是你真正想要的.
你正在传递一个代码块setTimeout().问题是这样update()执行时不在范围内.但是,如果你传入一个函数指针,那么这是有效的:
(function() {
$(document).ready(function() {update();});
function update() {
$("#board").append(".");
setTimeout(update, 1000); }
}
)();
Run Code Online (Sandbox Code Playgroud)
因为函数指针update在该块的范围内.
但就像我说的那样,不需要匿名函数,所以你可以像这样重写它:
$(document).ready(function() {update();});
function update() {
$("#board").append(".");
setTimeout(update, 1000); }
}
Run Code Online (Sandbox Code Playgroud)
要么
$(document).ready(function() {update();});
function update() {
$("#board").append(".");
setTimeout('update()', 1000); }
}
Run Code Online (Sandbox Code Playgroud)
这两项都有效.第二个工作原因是因为update()代码块内部现在在范围内.
我也更喜欢$(function() { ... }缩短的块形式,而不是setTimeout()在update()你内部调用只能使用setInterval():
$(function() {
setInterval(update, 1000);
});
function update() {
$("#board").append(".");
}
Run Code Online (Sandbox Code Playgroud)
希望能够解决这个问题.
med*_*iev 20
setInterval(function() {
$('#board').append('.');
}, 1000);
Run Code Online (Sandbox Code Playgroud)
如果要在某一点停止,可以使用clearInterval.
SetTimeout用于使您的代码集在指定的时间段后执行,因此对于您的要求,最好使用setInterval,因为这将在每次指定的时间间隔调用您的函数.