clearTimeout()没有做它应该做的事情

时间:2011-05-31 14:01:45

标签: javascript jquery ajax

任何人都可以看到以下代码有什么问题。它应该显示从30开始倒计时,然后用jquery的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 个答案:

答案 0 :(得分:6)

clearInterval(interval);代替clearTimeout(interval);

像这样:

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

答案 1 :(得分:2)

在“startTimer()”调用中添加对“stopRefresh()”的调用。

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

我的猜测是你的代码正在设法启动间隔计时器的多个实例。他们都会减少同样的反击。

编辑 - oops - Strangelove博士是正确的 - 您需要在间隔计时器上使用“clearInterval()”,对于超时计时器使用“clearTimeout()”。 (再次编辑,你可能应该这样做,但Chrome至少似乎通过“clearTimeout()”来停止间隔计时器。Here is the jsfiddle.

答案 2 :(得分:1)

我认为最好只使用间隔.. 当count < 1调用refreshPage