2012-01-26 6 views
0

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

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

    //my timer function 
} 

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

var c = 30; 

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

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

+1

'c' перезаписывается на каждой итерации, а' $ («# timer»). Html (c) 'вызывается немедленно. Где функция обертки? –

+1

Цель написания такого кода не упоминалась. Вопрос сам по себе очень неясен. – Tamil

ответ

0

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

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

Или не рекомендуемый способ:

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

docs

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

+0

Префикс 'c = 10;' by 'var', * или * переместить его в параметр функции:' (обратный отсчет функции (c) {...}) (10); '. –

+0

@RobW Спасибо за указание. Обновлен мой код. – qiao

+0

Теперь вы изменили код, я рекомендую также кешировать селектор jQuery. –

2

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

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