2014-01-05 20 views
2
loading = setTimeout(function(){$("#myDiv").html('3');},1500) 
loading = setTimeout(function(){$("#myDiv").html('2');},2500) 
loading = setTimeout(function(){$("#myDiv").html('1');},3500) 
loading = setTimeout(function(){$("#myDiv").html('Go!');},4500) 

我有代碼,例如倒計時,直到開始。但是,如果用戶點擊一個名爲「停止」的按鈕,我希望倒計時停止。我知道clearTimeout,我已經使用clearTimeout(加載),但這不起作用。我相信這是因爲加載是在稍後重新定義的。殺jquery setTimeout

感謝

+4

有關使用setInterval的是什麼? –

回答

5

clearTimout是行不通的,因爲你重用「正在載入」變量。試試這個:

loading1 = setTimeout(function(){$("#myDiv").html('3');},1500); 
loading2 = setTimeout(function(){$("#myDiv").html('2');},2500); 
loading3 = setTimeout(function(){$("#myDiv").html('1');},3500); 
loading4 = setTimeout(function(){$("#myDiv").html('Go!');},4500); 


$("#stop").click(function(e) { 
    e.preventDefault(); 

    clearTimeout(loading1); 
    clearTimeout(loading2); 
    clearTimeout(loading3); 
    clearTimeout(loading4); 
}); 
+0

這就是我所懷疑的,我會試試看。謝謝 –

+1

但是,不僅僅是一些超時,循環會更可取 - 或者鏈接超時。 –

0

點擊停止應該設置一個布爾值,你可以改變HTML之前在每個setTimout功能檢查。

var loading = [], 
    mydiv = document.getElementById("myDiv"), 
    stopped = false; 

function countdown(number){ 
    if(!stopped){ 
     mydiv.innerHTML = number; 
    } 
} 

loading[0] = setTimeout(function(){countdown("3")},1500); 
loading[1] = setTimeout(function(){countdown("2")},2500); 
loading[2] = setTimeout(function(){countdown("1")},3500); 
loading[3] = setTimeout(function(){countdown("0")},4500); 

$("#stop").on("click", function(e){ 
    e.preventDefault(); 
    stopped = true; 
}); 

在這裏找到JSFiddle

2

隨着setInterval,你就能真正暫停計時器(這是不可能的setTimeout):

var previousTime = Date.now(); 
var elapsed = 0; 
var stop = false; 
var step = 3; 

var timer = setInterval(function(){countdown()},100); 

var countdown = function() { 
    if (!stop) { 
     elapsed += Date.now() - previousTime; 
    } 
    previousTime = Date.now(); 

    if (elapsed >= 1500 && step == 3) { 
     $("#myDiv").html('3'); 
     step--; 
    } 
    else if (elapsed >= 2500 && step == 2) { 
     $("#myDiv").html('2'); 
     step--; 
    } 
    else if (elapsed >= 3500 && step == 1) { 
     $("#myDiv").html('1'); 
     step--; 
    } 
    else if (elapsed >= 4500 && step == 0) { 
     $("#myDiv").html('Go!'); 
     step = 1000; 
     clearInterval(timer); 
    } 
} 

$("#stop").click(function(e) { 
    e.preventDefault(); 

    stop = true; 
}); 

JsFiddle

+0

這是另一種方式。 – hitecherik

+1

試試我剛添加的jsfiddle,如果你重新開始倒計時,你會發現它稍有不同(只需再次點擊停止就可以做到) –

+0

哦......我明白了。所以你有效地暫停計時器。我試圖做到這一點,但沒有奏效。 – hitecherik