Comment puis-je désactiver tous les setTimeout événements?
Je suis en utilisant ajax et asp.net. iI ont une fonction javascript qui crée de nombreuses autres fonctions javascript avec setTimeout. Après la publication asynchrone happenes, je veux désactiver l'ensemble de ces setTimeouted événements. Comment puis-je le faire?
Vous devez vous connecter pour publier un commentaire.
Lorsque vous appelez
setTimeout()
, stocker l'ID de minuterie de sorte que vous pouvez l'effacer. Si vous êtes à la création de nombreux délais d'attente, puis un tableau est une bonne option pour le stockage de l'IDs. Par exemple:Ensuite, lorsque vous voulez vous débarrasser d'eux:
Comme @Robert indiqué ci-dessous,
clearTimeout()
de ne pas lever une erreur si le délai d'attente a déjà eu lieu, donc il n'y a aucune course du calendrier des problèmes ici.clearTimeout()
de ne pas, par une exception si un ID non valide est passé (si le délai d'attente déjà eu lieu).Si vous ne pouvez pas obtenir l'accès au code lorsque la minuterie est réglée de Nick réponse peut ne pas fonctionner, donc tout ce que je peux penser à est de ce hack.
C'est un hack, à utiliser avec précaution!
Fondamentalement, il s'empare de la plus haute id de minuterie et efface tout le moins. Mais il est également possible d'effacer les autres minuteurs que vous ne voulez pas clair!
Vous ne savez pas si vous pouvez faire cela à l'échelle mondiale, mais la méthode la plus courante consiste à utiliser clearTimeout. Vous passez la valeur de retour de setTimeout() pour clearTimeout(), vous pouvez utiliser un mondial de la var pour stocker tous timeout vars.
Tout d'abord, j'ai été en utilisant ce code:
Cependant, cette paix de code ne fonctionne pas sur Google Chrome. J'ai donc fait de l'amélioration de cette:
Enfin, c'est un hack, comme il a été mentionné dans le commentaire ci-dessus, afin de l'utiliser avec précaution.
Edit: correction d'une mauvaise variable est utilisée dans la boucle (utiliser je le à la place de x)