jQuery,setTimeout不起作用

Bolt_Head:

我仍然对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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章