2013-05-17 21 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 

Mam powyższy kod i czasami działa, czasami tak nie jest. Zastanawiam się, czy clearInterval rzeczywiście wyczyścić timer? ponieważ istnieje ten przycisk monitor, który zostanie wyłączony tylko wtedy, gdy jest w funkcji monitoring. Mam kolejny clearInterval po kliknięciu elementu o nazwie .outputRemove. Zobacz poniższy kod:Czy wewnątrz funkcji setInterval() można wywołać metodę clearInterval()?

Został włączony na chwilę, zanim zostanie ponownie wyłączony. Czy clearInterval odbierze program z funkcji setInterval?

+0

Być może problem jest 'loopname' w drugim fragmencie? Co to jest? – bfavaretto

+0

literówka. miałem funkcję 'clearloop (loopname)', która zawiera 'clearInterval', ale aby ją uprościć, zmieniłem ją bezpośrednio w powyższym kodzie. – yvonnezoe

Odpowiedz

98

Tak, można. Można nawet przetestować go:

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);

W tym przykładzie, to zegar wybija gdy i osiągnie 5.

+2

Widzę. czy zawsze musi być zmienną lokalną? w moim przypadku ustawiam go jako globalny, ponieważ mam zewnętrzną funkcję, która będzie wywoływała clearInterval ... a także mam 2 setInterval w tym czasie i one się ścierają:/ – yvonnezoe

+0

Mam tu pytanie, czy utknie ono w punkt 'clearInterval', jeśli' setInterval' zatrzymał się gdzieś indziej/w ogóle nie uruchamiał? – yvonnezoe

+0

@yonnezoe zaktualizował odpowiedź, a to nie. Funkcja działająca w danym przedziale kończy się, zanim nigdy nie zostanie uruchomiona ponownie. Jednak w przypadku twojego pytania masz wiele timerów. Sugeruję, żebyś przemyślał swoje podejście. – Joseph

Powiązane problemy