web-dev-qa-db-fra.com

Comment arrêter "setInterval"

Comment puis-je arrêter et démarrer setInterval?

Supposons que j'ai un textarea. Je veux arrêter setInterval sur le focus et redémarrer setInterval sur le flou (avec jQuery).

102
testkhan

Vous devez enregistrer l'id du timer lorsque vous le démarrez. Vous utiliserez cette valeur ultérieurement pour l'arrêter, à l'aide de la touche clearInterval fonction:

$(function () {
  var timerId = 0;

  $('textarea').focus(function () {
    timerId = setInterval(function () {
      // interval function body
    }, 1000);
  });

  $('textarea').blur(function () {
    clearInterval(timerId);
  });

});
170
CMS

Ceci est basé sur la réponse de CMS. La question demandait que le minuteur soit redémarré sur le flou et arrêté sur le focus, je l'ai donc déplacé un peu:

$(function () {
  var timerId = 0;

  $('textarea').focus(function () {
    clearInterval(timerId);
  });

  $('textarea').blur(function () {
    timerId = setInterval(function () {
     //some code here 
    }, 1000);
  });
});
24
SDG

Stockez le retour de setInterval dans une variable et utilisez-le plus tard pour effacer l'intervalle.

var timer = null;
$("textarea").blur(function(){
    timer = window.setInterval(function(){ ... whatever ... }, 2000);
}).focus(function(){
    if(timer){
       window.clearInterval(timer);
       timer = null
    }
});
18
Doug Neiner

setInterval renvoie un identifiant que vous pouvez utiliser pour annuler l'intervalle avec clearInterval ()

11
Roy Tang