2013-05-17 13 views
62
bigloop=setInterval(function() { 
       var checked = $('#status_table tr [id^="monitor_"]:checked'); 
       if (checked.index()===-1 ||checked.length===0 ||){ 
        bigloop=clearInterval(bigloop); 
        $('#monitor').button('enable'); 
       }else{ 

         (function loop(i) {       
          //monitor element at index i 
          monitoring($(checked[i]).parents('tr')); 
          //delay of 3 seconds 
          setTimeout(function() { 
           //when incremented i is less than the number of rows, call loop for next index 
           if (++i < checked.length) loop(i); 
          }, 3000); 
         }(0)); //start with 0 
       }        
      }, index*3000); //loop period 

Ho il codice sopra e a volte funziona, a volte non lo è. Mi chiedo se clearInterval cancella effettivamente il timer ?? perché c'è questo pulsante monitor che verrà disabilitato solo quando è nella funzione monitoring. Ho un altro clearInterval quando si fa clic su un elemento chiamato .outputRemove. Vedere il codice di seguito:Can clearInterval() può essere chiamato all'interno di setInterval()?

Ma è stato abilitato per un po 'prima che venga nuovamente disattivato. Il clearInterval uscirà dalla funzione setInterval?

+0

Forse il problema è 'loopname' nel secondo frammento di? Cos'è quello? – bfavaretto

+0

errore di battitura. ho avuto una funzione 'clearloop (loopname)' che contiene il 'clearInterval' ma per semplificarlo, l'ho modificato direttamente nel codice sopra. – yvonnezoe

risposta

98

Sì, è possibile. È anche possibile testare:

var i = 0; 
 
var timer = setInterval(function() { 
 
    console.log(++i); 
 
    if (i === 5) clearInterval(timer); 
 
    console.log('post-interval'); //this will still run after clearing 
 
}, 200);

In questo esempio, questo timer cancella quando i raggiunge 5.

+2

vedo. deve sempre essere una variabile locale? nel mio caso, l'ho impostato come globale perché ho una funzione esterna che chiamerà clearInterval ... e inoltre, ho 2 setInterval al momento e si stanno scontrando:/ – yvonnezoe

+0

ho una domanda qui, sarà bloccato al punto di 'clearInterval' se' setInterval' si è fermato da qualche altra parte/non ha iniziato affatto? – yvonnezoe

+0

@yvonnezoe ha aggiornato la risposta, e questo è no. La funzione eseguita per intervallo finisce prima che non venga mai più eseguita. Tuttavia, nel caso della tua domanda, hai più timer. Ti suggerisco di ripensare al tuo approccio. – Joseph