Annuler / tuer window.setTimeout () avant que cela ne se produise

194

J'ai quelques endroits où j'utilise la ligne ci-dessous pour effacer un statut, par exemple. J'en ai quelques-uns qui traînent pendant 10 secondes ou plus et si l'utilisateur clique sur l'action, l'action peut se produire à des intervalles de temps incorrects.

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

Est-il possible d'annuler ou de tuer cela avec du code jQuery ou JavaScript, donc je n'ai pas ce processus en suspens?

Toran Billups
la source

Réponses:

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

clearTimeout(timer1)
Diodée - James MacFarlane
la source
101
window n'est que le nom de l'espace de noms global, il n'est donc pas vraiment nécessaire (pour setTimeout ou clearTimeout).
Matthew Crumley
7
Étant donné que le premier paramètre de setTimeout est une fonction et que «removeStatusIndicator ()» est une fonction, vous pouvez obtenir des performances (et taper moins) simplement: var timer1 = setTimeout (removeStatusIndicator, statusTimeout); Cela évite les appels de fonction imbriqués.
HarleyDave
5
et window.clearTimeout(timer1)ne fonctionnera pas dans Node.js. Soit il suffit d'utiliser clearTimeout(timer1)ouglobal.clearTimeout(timer1)
CL22
2
@ user1944491 Il n'y aura pas de double appel: notez que @HarleyDave a écrit setTimeout(removeStatusIndicator, ...), c'est-à-dire que la fonction removeStatusIndicatorn'est pas appelée.
Frerich Raabe
3
Veuillez ignorer ce que @ user1944491 dit - c'est faux. La fonction passée à setTimeout n'est pas appelée deux fois. Chrome n'a pas changé son comportement, plus probablement vous avez foiré en appelant la fonction setTimeout( func(), 0 )plutôt quesetTimeout( func, 0 )
Sethi
2

Le window.clearTimeout () devrait faire ce que vous essayez de réaliser.

Florin Toader
la source
6
Veuillez expliquer votre réponse et donner quelques exemples. Une bonne réponse aura toujours une explication de ce qui a été fait et pourquoi cela a été fait de cette manière, non seulement pour le PO mais pour les futurs visiteurs de SO.
B001
4
+1 simplement parce que le commentaire ci-dessus me semble absolument non pertinent et aléatoire. La réponse semble tout à fait correcte, elle vient d'être publiée plus tard, elle ressemble donc davantage à un "copier-coller" de la réponse déjà fournie.
vir us