Anuluj / zabij window.setTimeout () zanim to nastąpi

194

Mam kilka miejsc, w których na przykład używam poniższej linii do usunięcia statusu. Mam kilka takich, które spędzają czas przez 10 sekund lub dłużej, a jeśli użytkownik kliknie, akcja może się zdarzyć w niewłaściwych odstępach czasu.

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

Czy można to anulować lub zabić za pomocą kodu jQuery lub JavaScript, aby proces ten nie był zawieszony?

Toran Billups
źródło

Odpowiedzi:

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

clearTimeout(timer1)
Diodeus - James MacFarlane
źródło
101
window jest tylko nazwą globalnej przestrzeni nazw, więc nie jest tak naprawdę konieczne (ani dla setTimeout, ani clearTimeout).
Matthew Crumley,
7
Ponieważ pierwszym parametrem setTimeout jest funkcja, a funkcja „removeStatusIndicator ()” jest funkcją, możesz zwiększyć wydajność (i pisać mniej), po prostu: var timer1 = setTimeout (removeStatusIndicator, statusTimeout); Pozwala to uniknąć zagnieżdżonych wywołań funkcji.
HarleyDave
5
i window.clearTimeout(timer1)nie będzie działać w Node.js. Albo użyj clearTimeout(timer1)alboglobal.clearTimeout(timer1)
CL22,
2
@ user1944491 Nie będzie podwójnego wywołania: zwróć uwagę, że @HarleyDave napisał setTimeout(removeStatusIndicator, ...), tzn. funkcja removeStatusIndicatornie jest wywoływana.
Frerich Raabe
3
Zignoruj ​​to, co mówi @ user1944491 - to źle. Funkcja przekazana do setTimeout nie jest wywoływana dwukrotnie. Chrome nie zmienił swojego zachowania, bardziej prawdopodobne jest, że spieprzyłeś go, wywołując funkcję, setTimeout( func(), 0 )a niesetTimeout( func, 0 )
Sethi
2

Window.clearTimeout () powinien zrobić to, co próbujesz osiągnąć.

Florin Toader
źródło
6
Proszę wyjaśnić swoją odpowiedź i podać kilka przykładów. Dobra odpowiedź zawsze będzie wyjaśnienie, co się stało i dlaczego to było zrobione w taki sposób, nie tylko dla PO, ale dla przyszłych turystów do tego.
B001
4
+1 tylko dlatego, że powyższy komentarz wydaje mi się zupełnie nieistotny i przypadkowy. Odpowiedź wygląda absolutnie dobrze, została właśnie opublikowana później, więc jest bardziej jak „kopiuj-wklej” już dostarczonej odpowiedzi.
nas