Window.setTimeout () gerçekleşmeden önce iptal et / öldür


194

Örneğin, bir durumu temizlemek için aşağıdaki satırı kullandığım birkaç yerim var. Ben 10 saniye veya daha fazla takılmak bunlardan birkaç var ve kullanıcı eylem etrafında tıklayarak alırsanız yanlış zaman aralıklarında oluşabilir.

window.setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

Bunu iptal etmek veya bazı jQuery veya JavaScript koduyla öldürmek mümkün mü, bu yüzden bu işlemin etrafında asılı kalmam mı?

Yanıtlar:


375
var timer1 = setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

clearTimeout(timer1)

101
penceresi yalnızca genel ad alanının adıdır, bu yüzden gerçekten gerekli değildir (setTimeout veya clearTimeout için).
Matthew Crumley

7
SetTimeout öğesinin ilk parametresi bir işlev olduğundan ve 'removeStatusIndicator ()' bir işlev olduğundan, yalnızca şu şekilde performans elde edebilirsiniz (ve daha az yazın): var timer1 = setTimeout (removeStatusIndicator, statusTimeout); Bu, iç içe işlev çağrılarını önler.
HarleyDave

5
ve window.clearTimeout(timer1)Node.js'de çalışmaz. Ya sadece kullanın clearTimeout(timer1)ya daglobal.clearTimeout(timer1)
CL22

2
@ user1944491 Çift çağırma olmayacak: @HarleyDave'in yazdığına setTimeout(removeStatusIndicator, ...), yani işlevin çağrılmadığına dikkat edin removeStatusIndicator.
Frerich Raabe

3
Lütfen @ user1944491 ne dediğini görmezden gelin - bu yanlış. SetTimeout öğesine iletilen işlev iki kez çağrılmaz. Krom davranışını değişmedi, daha büyük olasılıkla size işlevini çağırarak berbat setTimeout( func(), 0 )ziyadesetTimeout( func, 0 )
Sethi

2

Window.clearTimeout (), elde etmeye çalıştığınız şeyi yapmalıdır.


6
Lütfen cevabınızı açıklayın ve bazı örnekler verin. Bir güzel cevap bu OP için ancak bunu gelecek ziyaretçiler için değil, bu şekilde yapıldığını neden hep ne yapıldı bir açıklama elde eder ve bunun.
B001 ᛦ

4
+1, yukarıdaki yorumun benim için kesinlikle alakasız ve rastgele göründüğü için. Cevap kesinlikle iyi görünüyor, daha sonra yayınlandı, bu yüzden daha önce verilen cevabın bir "kopyala-yapıştır" ına benziyor.
vir us
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.