任何人都可以看到以下代码有什么问题。它应该显示从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()
答案 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