JQuery,setTimeout不起作用

时间:2009-09-30 02:56:02

标签: 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>

myCode.js

(function(){
   $(document).ready(function() {update();});

   function update() { 
      $("#board").append(".");
      setTimeout('update()', 1000);     }
 })();

myCode.js文件正常工作,“update()”第一次运行,但从未再次运行。

4 个答案:

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