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 

Ich habe den Code oben und manchmal funktioniert es, manchmal ist es nicht. Ich wundere mich , wenn der ClearInterval tatsächlich den Timer löschen? weil es diese monitor Schaltfläche gibt, die nur deaktiviert wird, wenn sie in monitoring Funktion ist. Ich habe eine andere clearInterval, wenn ein Element namens .outputRemove geklickt wird. Siehe unten stehenden Code:Kann clearInterval() in setInterval() aufgerufen werden?

Aber es wurde für eine Weile aktiviert, bevor es wieder deaktiviert wird. Wird clearInterval das Programm aus der setInterval Funktion heraus bekommen?

+0

Vielleicht ist das Problem 'loopname' im zweiten Schnipsel? Was ist das? – bfavaretto

+0

opps Tippfehler. Ich hatte eine Funktion 'clearloop (loopname)', die das 'clearInterval' enthält, aber um es zu vereinfachen, habe ich es direkt im obigen Code geändert. – yvonnezoe

Antwort

98

Ja, Sie können. Sie können es sogar testen:

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 diesem Beispiel dieser Timer wird gelöscht, wenn i 5. erreicht

+2

ich sehe. Muss es immer eine lokale Variable sein? in meinem Fall stelle ich es als global ein, weil ich äußere Funktion habe, die clearInterval aufrufen wird ... und auch, ich habe 2 setInterval zu der Zeit sein, und sie kollidieren:/ – yvonnezoe

+0

Ich habe eine Frage hier, wird es bei der feststecken Punkt von 'clearInterval' wenn' setInterval' an einer anderen Stelle stehen geblieben ist oder gar nicht gestartet wurde? – yvonnezoe

+0

@yvonnezoe die Antwort aktualisiert, und das ist nein. Die Funktion, die pro Intervall ausgeführt wird, wird beendet, bevor sie nie wieder ausgeführt wird. Im Falle Ihrer Frage haben Sie jedoch mehrere Timer. Ich schlage vor, dass Sie Ihren Ansatz überdenken. – Joseph

Verwandte Themen