JQuery SetTimeout цикл в то время как - PullRequest
0 голосов
/ 26 января 2012

Мой очень простой цикл пока не работает, похоже, проблема в setTimeout. Я пытаюсь написать небольшую игру с обратным отсчетом.

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

  //my timer function
}

Так что, если с это время

var c = 30;

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

Это не просто обратный отсчет, но пользователи должны иметь возможность совершать действия во время обратного отсчета. Спасибо за вашу помощь!

Ответы [ 3 ]

5 голосов
/ 26 января 2012

setTimeout ожидает функцию в качестве первого параметра.Эта функция будет вызываться, когда истечет время.Но то, что вы предоставили в своем примере кода, является результатом вызова $("#timer").html(c)

Правильный способ использования setTimeout должен быть таким:как обратный отсчет, и вот пример кода:

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 будет проще, если вы действительно пытаетесь реализовать обратный отсчет.

2 голосов
/ 26 января 2012

setInterval будет лучше.

var c = 100; 
var intervalID = setInterval(function(){
    if (c>0){
        $("#timer").html(c);
        c--;
    } else {
        clearInterval(intervalID);
    }
}, 1000);  
0 голосов
/ 26 января 2012

Я не могу понять, что вы делаете с этим циклом и переменной c, но вы неправильно используете setTimeout функцию

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

Или не рекомендуется:

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

1010 * Docs *

...