Задержка jQuery внутри циклов - PullRequest
1 голос
/ 19 января 2012

Я хочу сделать таймер в 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 ]

6 голосов
/ 19 января 2012

delay только для очереди FX.

Стандартный таймер выглядит следующим образом

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

http://jsfiddle.net/J9Zwa/

1 голос
/ 19 января 2012

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

setInterval(function(){
   $("span.secondRemain").text(secondsRemain);
},1000);
1 голос
/ 19 января 2012

.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();
}
...