Abbrechen / töten Sie window.setTimeout (), bevor es passiert

194

Ich habe einige Stellen, an denen ich beispielsweise die folgende Zeile verwende, um einen Status zu löschen. Ich habe einige davon, die 10 Sekunden oder länger rumhängen und wenn der Benutzer durch die Aktion klickt, kann dies in falschen Zeitintervallen geschehen.

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

Ist es möglich, dies mit jQuery- oder JavaScript-Code abzubrechen oder zu beenden, damit dieser Prozess nicht herumhängt?

Toran Billups
quelle

Antworten:

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

clearTimeout(timer1)
Diodeus - James MacFarlane
quelle
101
Fenster ist nur der Name des globalen Namespace, daher ist er nicht wirklich erforderlich (entweder für setTimeout oder clearTimeout).
Matthew Crumley
7
Da der erste Parameter für setTimeout eine Funktion und 'removeStatusIndicator ()' eine Funktion ist, können Sie die Leistung steigern (und weniger eingeben), indem Sie einfach: var timer1 = setTimeout (removeStatusIndicator, statusTimeout); Dies vermeidet die verschachtelten Funktionsaufrufe.
HarleyDave
5
und window.clearTimeout(timer1)funktioniert nicht in Node.js. Entweder nur verwenden clearTimeout(timer1)oderglobal.clearTimeout(timer1)
CL22
2
@ user1944491 Es erfolgt kein doppelter Aufruf: Beachten Sie, dass @HarleyDave geschrieben hat setTimeout(removeStatusIndicator, ...), dh die Funktion removeStatusIndicatorwird nicht aufgerufen.
Frerich Raabe
3
Bitte ignorieren Sie, was @ user1944491 sagt - es ist falsch. Die an setTimeout übergebene Funktion wird nicht zweimal aufgerufen. Chrome hat sein Verhalten nicht geändert. Wahrscheinlich haben Sie es durch Aufrufen der Funktion vermasselt, setTimeout( func(), 0 )anstattsetTimeout( func, 0 )
Sethi,
2

Das window.clearTimeout () sollte das tun, was Sie erreichen möchten.

Florin Toader
quelle
6
Bitte erläutern Sie Ihre Antwort und geben Sie einige Beispiele an. Eine gute Antwort wird immer eine Erklärung darüber enthalten, was getan wurde und warum es so getan wurde, nicht nur für das OP, sondern auch für zukünftige Besucher von SO.
B001
4
+1, nur weil der obige Kommentar für mich absolut nicht relevant und zufällig erscheint. Die Antwort sieht absolut in Ordnung aus, sie wurde erst später veröffentlicht, es ist also eher ein "Kopieren-Einfügen" der bereits bereitgestellten Antwort.
Vir uns