J'utilise setInterval(fname, 10000);
pour appeler une fonction toutes les 10 secondes en JavaScript. Est-il possible d'arrêter de l'appeler lors d'un événement?
Je veux que l'utilisateur puisse arrêter le rafraîchissement répété des données.
J'utilise setInterval(fname, 10000);
pour appeler une fonction toutes les 10 secondes en JavaScript. Est-il possible d'arrêter de l'appeler lors d'un événement?
Je veux que l'utilisateur puisse arrêter le rafraîchissement répété des données.
setInterval()
renvoie un ID d'intervalle, que vous pouvez transmettre à clearInterval()
:
var refreshIntervalId = setInterval(fname, 10000);
/* later */
clearInterval(refreshIntervalId);
Voir les documents pour setInterval()
et clearInterval()
.
clearInterval
. J'ai utiliséwindow.refreshIntervalId
au lieu d'une variable locale, et cela fonctionne très bien!$('foo').data('interval', setInterval(fn, 100));
puis à le supprimer avecclearInterval($('foo').data('interval'));
Je suis sûr qu'il existe également un moyen non jQuery de le faire.Si vous définissez la valeur de retour de
setInterval
sur une variable, vous pouvez utiliserclearInterval
pour l'arrêter.la source
Vous pouvez définir une nouvelle variable et la faire incrémenter de ++ (en compter une) à chaque exécution, puis j'utilise une instruction conditionnelle pour la terminer:
J'espère que cela aide et c'est juste.
la source
clearInterval(varName);
. Je m'attendaisclearInterval
à ne pas fonctionner une fois le nom de la fonction transmis, je pensais qu'il fallait l'ID d'intervalle. Je suppose que cela ne peut fonctionner que si vous avez une fonction nommée, car vous ne pouvez pas passer une fonction anonyme en tant que variable à l'intérieur de lui-même.$(document).ready(function(){ });
est jQuery, c'est pourquoi cela ne fonctionne pas. Cela aurait dû être mentionné au moins.varName
, qui stocke une fonction sans nom - wha ?? Vous devriez changer ou retirer cette réponse, à mon humble avis.Les réponses ci-dessus ont déjà expliqué comment setInterval renvoie un descripteur et comment ce descripteur est utilisé pour annuler le temporisateur d'intervalle.
Quelques considérations architecturales:
Veuillez ne pas utiliser de variables "sans portée". Le moyen le plus sûr consiste à utiliser l'attribut d'un objet DOM. L'endroit le plus simple serait le «document». Si le rafraîchissement est démarré par un bouton marche / arrêt, vous pouvez utiliser le bouton lui-même:
Puisque la fonction est définie à l'intérieur du gestionnaire de clic de bouton, vous n'avez pas besoin de la définir à nouveau. Le chronomètre peut être repris si le bouton est de nouveau cliqué.
la source
document
que pour le mettrewindow
?Déjà répondu ... Mais si vous avez besoin d'une minuterie en vedette, réutilisable qui prend également en charge plusieurs tâches à différents intervalles, vous pouvez utiliser mon TaskTimer (pour Node et navigateur).
Dans votre cas, lorsque les utilisateurs cliquent pour perturber l'actualisation des données; vous pouvez également appeler
timer.pause()
ensuitetimer.resume()
si elles ont besoin pour réactiver.Voir plus ici .
la source
La méthode clearInterval () peut être utilisée pour effacer un ensemble de temporisations avec la méthode setInterval ().
setInterval renvoie toujours une valeur d'ID. Cette valeur peut être passée dans clearInterval () pour arrêter le temporisateur. Voici un exemple de temporisateur commençant à 30 et s'arrêtant quand il devient 0.
la source
@cnu,
Vous pouvez arrêter l'intervalle, lorsque vous essayez d'exécuter du code avant de regarder votre navigateur de console (F12) ... : P
Vérifiez par exemple une source:
la source
Déclarez la variable pour affecter la valeur renvoyée par setInterval (...) et passez la variable affectée à clearInterval ();
par exemple
// Partout où vous avez accès au minuteur déclaré ci-dessus, appelez clearInterval
la source
Vous pouvez également arrêter l'intervalle en ajoutant un écouteur d'événements, disons un bouton avec l'ID "stop-interval":
HTML:
Remarque: L'intervalle sera toujours exécuté, mais rien ne se passera cependant.
la source
C'est ainsi que j'ai utilisé la méthode clearInterval () pour arrêter le chronomètre après 10 secondes.
la source
Utilisez setTimeOut pour arrêter l'intervalle après un certain temps.
la source
Je suppose que le code suivant vous aidera:
Vous avez fait le code 100% correct ... Alors ... Quel est le problème? Ou c'est un tutoriel ...
la source
Pourquoi ne pas utiliser une approche plus simple? Ajoutez une classe!
Ajoutez simplement une classe qui indique à l'intervalle de ne rien faire. Par exemple: en vol stationnaire.
Je cherchais cette approche rapide et facile depuis des lustres, donc je poste plusieurs versions pour l'introduire autant de personnes que possible.
la source
this.setInterval(function() { if(!$('#counter').hasClass('pauseInterval')) { //do something } }, 500);
est tout ce que vous avez pour le code. De plus, le chèque est la première chose que vous faites, il est donc très léger lorsqu'il est en vol stationnaire. C'est à cela que cela sert: suspendre temporairement une fonction . Si vous souhaitez y mettre fin indéfiniment: vous supprimez bien sûr l'intervalle.