2010-10-02 26 views

cevap

89

setTimeout() numaralı telefonu aradığınızda, temizleyebilmeniz için zamanlayıcı kimliğini saklayın. Çok sayıda zaman aşımı oluşturuyorsanız, bir dizi, kimlikleri saklamak için iyi bir seçenektir. Sonra

var timeouts = []; 
//then, store when you create them 
timeouts.push(setTimeout({ ... }, 1000)); 

bunları temizlemek istediğiniz: aşağıda belirtildiği

for (var i = 0; i < timeouts.length; i++) { 
    clearTimeout(timeouts[i]); 
} 
//quick reset of the timer array you just cleared 
timeouts = []; 

@Robert olarak zaman aşımı oluştu zaten eğer, clearTimeout(), hiçbir ırk vardır, böylece/bir hata atmaz Örneğin zamanlama sorunları burada.

+3

kayda değer döngüde kullanılan yanlış değişken, sabit, 'clearTimeout()' (zaman aşımı zaten oluştu varsa) bir istisna yoluyla geçersiz kimlik geçirilir etmezse . – Robert

+0

@Robert - İyi bir nokta, bunu kabul ettim ama bunu ekleyeceğim, herhangi bir endişe varsa :) –

+0

Ben javascript tek iş parçacığı modeli ile şunu düşünmek istiyorum: Her durumda clearTimeout tamamlandığında, zaman aşımı olayının tekrar olmayacağının bir garantisi vardır. Dokümanlar içinde değil, bu söylemeye gerek yok mu? – jcalfee314

4

Global olarak bunu yapabileceğinizden emin değil, ancak en yaygın yöntem clearTimeout kullanmaktır. SetTimeout() öğesinin dönüş değerini clearTimeout() öğesine iletirseniz, tüm zaman aşımı değişkenlerini saklamak için genel bir var kullanabilirsiniz.

92

Zamanlayıcının ayarlandığı koda erişim sağlayamıyorsanız, Nick'in cevabı işe yaramayabilir, bu yüzden düşünebildiğim tek şey bu bilgisayar korsanlığıdır.

Bu bir hacktir, dikkatli kullanın!

// Set a fake timeout to get the highest timeout id 
var highestTimeoutId = setTimeout(";"); 
for (var i = 0 ; i < highestTimeoutId ; i++) { 
    clearTimeout(i); 
} 

Temel olarak en yüksek zamanlayıcı id kapar ve daha az şeyi temizler. Ancak, temizlemek istemediğiniz diğer zamanlayıcıları temizlemek de mümkündür!

+0

Vaidotas sayesinde, set zaman aşımı işlevimi daha tarayıcı dostu olacak şekilde güncelledim – SeanDowney

+12

+1 bu, tüm zaman aşımlarını kapatmak için Javascript konsoluna yapıştırmak için kullanabileceğiniz çok kullanışlı bir pasaj! –

+2

Bu hack, yakalanması zor hatalara neden oluyor, çünkü bir 3. parti kitaplığı setTimout ve başlatma için setInterval kullanıyorsa, bu libary, yeni öğrendiğim gibi bir neden olmadan çalışmayı durduracaktır. – user2191332

3

Öncelikle, bu kodu kullanıyordu:

var x = setTimeout(''); 
for (var i = 0; i < x; i++) 
    clearTimeout(x); 

Ancak bu kod barış Google Chrome'da çalışmadı. Yani bunun için iyileştirme yaptık: Yukarıdaki açıklamada belirtildiği, bu nedenle dikkatli kullanın gibi

var x = setTimeout('alert("x");',100000); //It is very low probability that after 100 seconds x timeout will not be cleared 
for (var i = 0; i <= x; i++) 
    clearTimeout(i); 

Son olarak, bir hack vardır.

Düzenleme: (kullanım i yerine x'in) Ayrıca

İlgili konular