2012-01-19 3 views
1

Я хочу сделать таймер в jQuery, я хочу изменить значение диапазона каждую секунду, я делаю так, но это задержка не работает.Задержка jQuery внутри циклов

function startTimer(daysRemain,hoursRemain,minutesRemain,secondsRemain){ 

      while(secondsRemain < 60){ 
       secondsRemain++; 
       $("span.secondRemain").delay(1000).text(secondsRemain); //change value of seconds each one second 
       // I try this way too! 
       /* setTimeout(function(){ 
        $("span.secondRemain").text(secondsRemain); 
       },1000);*/ 

      } 

ответ

3

delay предназначено только для очереди fx.

Стандартный таймер следующим

var t = 0; 
setInterval(function() { 
    $('div').text(t); 
    t += 1; 
},1000); 

http://jsfiddle.net/J9Zwa/

+0

ммм вы правы, но я слишком попробовал SetTimeout, а также не работает. – palAlaa

+0

'setTimeout' будет звонить только один раз. Вы можете либо вызвать 'setTimeout' снова в первоначальном' setTimeout', либо использовать 'setInterval', чтобы увидеть мое редактирование для примера основного таймера. – Trevor

1

.delay() не откладывайте работает JavaScript. Он переходит в очередь анимации, и когда очередь переходит к этой операции, она устанавливает таймер для времени задержки и не переходит к следующей операции в очереди до тех пор, пока не пройдет столько времени.

Как таковой, вы не можете использовать его в своем цикле, чтобы сделать задержку javascript. Вам нужно будет использовать setTimeout() вот так.

function startTimer(daysRemain,hoursRemain,minutesRemain,secondsRemain) { 

    function nextTime() { 
     if (secondsRemain < 60){ 
      secondsRemain++; 
      $("span.secondRemain").text(secondsRemain); //change value of seconds each one second 
      setTimeout(nextTime, 1000); 
     } 
    } 
    nextTime(); 
} 
1

Вы пробовали:

setInterval(function(){ 
    $("span.secondRemain").text(secondsRemain); 
},1000);