これには 2 つの解決策があります。1 つはタイマーが onclick の外部で実行されていることを追跡するフラグを定義および設定することです。もう 1 つは、カウントダウンの前に 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 を削除することを除いて、基本的にソリューション 1 と同じです。
編集: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);
};
ps。コードの先頭にある変数でカウントダウンを定義するのを忘れましたか、それともカウントダウンが別の場所で定義されていますか? 現在、それはグローバルであり、他のコード (ライブラリなど) によって上書きされる可能性があります。