Jquery setTimeout循环同时

时间:2012-01-26 17:13:45

标签: jquery while-loop settimeout

我的非常简单的循环虽然不起作用,但似乎问题来自setTimeout。 我尝试用倒计时编写一个小游戏。

while ( there is time ) {
  // actions possible to do

  //my timer function
}

所以如果c是时间

var c = 30;

while (c > 0)
{ 
c -= 1;      
setTimeout( $("#timer").html(c) , 1000);   
};

这不仅仅是倒计时,但用户必须能够在倒计时期间采取行动。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:5)

setTimeout期望函数作为其第一个参数。当时间结束时将调用此函数。但是,您在示例代码中提供的是调用$("#timer").html(c)

的结果

使用setTimeout的正确方法应该是:

setTimeout(function() { 
  // blah blah
}, 1000);

我猜你要做倒计时之类的事情,这是一个示例代码:

function countdown(count, container) {      // declare the countdown function.
   var $container = $(container);
   (function step() {
    $container.html(count);               // set the timer html
    if (count-- > 0) {                      // decrement counter and stop when counter reaches 0
      setTimeout(step, 1000);               // if counter is not 0, then issue the next timeout
    }
  })();                                     // call step immediately
}
countdown(10, '#timer');

现场演示位于http://jsfiddle.net/cazSn/2/

PS:如果你真的想要实现倒计时,使用setInterval会更容易。

答案 1 :(得分:2)

setInterval会更好。

var c = 100; 
var intervalID = setInterval(function(){
    if (c>0){
        $("#timer").html(c);
        c--;
    } else {
        clearInterval(intervalID);
    }
}, 1000);  

答案 2 :(得分:0)

我无法理解您使用该循环和c变量做了什么,但是您滥用了setTimeout函数

setTimeout( 1000, function(){$("#timer").html(c)};

或者不推荐的方式:

setTimeout('$("#timer").html(c)', '1000';

docs