有两种解决方案,一种是定义和设置一个标志来跟踪计时器在 onclick 之外运行,另一种是在倒计时之前调用 clearInterval 以停止任何已经运行的倒计时。
解决方案 1:
指示计时器是否正在运行的标志。
var count = 10,
startcounter = document.getElementById("stercount"),
running;
startcounter.onclick = function() {
if (running)
return;
running = true;
countdown = setInterval(function(){
document.getElementById("countdown").innerHTML = count + " seconds remaining!";
if (count <= 0) {
clearInterval(countdown);
document.getElementById("countdown").innerHTML = "Done!";
}
count--;
}, 1000);
};
解决方案 2:
在启动计时器之前停止计时器。clearInterval
var count = 10,
startcounter = document.getElementById("stercount");
startcounter.onclick = function() {
clearInterval(countdown);
countdown = setInterval(function(){
document.getElementById("countdown").innerHTML = count + " seconds remaining!";
if (count <= 0) {
clearInterval(countdown);
document.getElementById("countdown").innerHTML = "Done!";
}
count--;
}, 1000);
};
解决方案 3:
您可以将countdown
其用作您的标志,但这样做时,您必须确保每次清除它时都将其设置为 null。这与解决方案 1 基本相同,只是删除了一个 var。
编辑:如果您没有countdown
在 onclick 上方的 vars 列表中定义,这可能实际上不起作用,因为您的 countdown-DIV 将填充 countdown-global。
var count = 10,
startcounter = document.getElementById("stercount");
startcounter.onclick = function() {
if (countdown)
return;
countdown = setInterval(function(){
document.getElementById("countdown").innerHTML = count + " seconds remaining!";
if (count <= 0) {
clearInterval(countdown);
countdown = null;
document.getElementById("countdown").innerHTML = "Done!";
}
count--;
}, 1000);
};
附言。您是否忘记在代码顶部的变量中定义倒计时或在其他地方定义倒计时?现在它将是一个全局的,任何其他代码(例如库)都可以覆盖它。