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?

Odpowiedzi:


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

clearTimeout(timer1)

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ąć.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.