clearTimeout () не делает то, что должен - PullRequest
1 голос
/ 31 мая 2011

Кто-нибудь может увидеть, что не так с помощью следующего кода.он должен отображать счетчик вниз с 30, а затем обновляет страницу с помощью функции jjery ajax load().

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

что я делаю не так?

function refreshPage(){
    stopRefresh();
    $('div.yui-content').load('rdPage.aspx div.yui-content', doCalculation);
}

function stopRefresh(){
    clearTimeout(timer);
    clearTimeout(interval);
}

var count, timer, interval;

function startTimer(){
    count = 30;
    timer = setTimeout(refreshPage,count * 1000);
    interval= setInterval(updateTimer,1000);
}
function updateTimer(){
    count --;
    $('#timerSpan').text("Refreshing in " + count + "s");
}


function doCalculation(){
    negativeNumberRed();
    startTimer();

}

редактировать: добавлено doCalculations()

Ответы [ 3 ]

6 голосов
/ 31 мая 2011

попробуйте clearInterval(interval); вместо clearTimeout(interval);

Как это:

function stopRefresh(){
    clearTimeout(timer);
    clearInterval(interval);
}
2 голосов
/ 31 мая 2011

Добавьте вызов "stopRefresh ()" к вызову "startTimer ()".

function startTimer(){
    stopRefresh();
    count = 30;
    timer = setTimeout(refreshPage,count * 1000);
    interval= setInterval(updateTimer,1000);
}

Я предполагаю, что вашему коду удается запустить более одного экземпляра интервального таймера.Все они уменьшают один и тот же счетчик.

edit - упс - доктор Странджелов прав - вам нужно использовать clearInterval () для интервальных таймеров и clearTimeout ()для таймеров тайм-аута.( отредактируйте снова хорошо, вы, вероятно, должны сделать это, но, по крайней мере, Chrome, по крайней мере, останавливает интервальные таймеры через "clearTimeout ()". Вот jsfiddle.

1 голос
/ 31 мая 2011

Я думаю, что лучше использовать только интервал .. А когда count < 1 вызывает refreshPage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...