setInterval () 내에서 clearInterval ()을 호출 할 수 있습니까?


124
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

위의 코드가 있고 때로는 작동하지만 때로는 그렇지 않습니다. clearInterval이 실제로 타이머를 지우는 지 궁금 합니다.? monitor작동 중일 때만 비활성화되는 이 버튼 이 있기 때문입니다 monitoring. clearInterval호출 된 요소 .outputRemove를 클릭 할 때 다른 것이 있습니다. 아래 코드를 참조하십시오.

//remove row entry in the table      
        $('#status_table').on('click', '.outputRemove', function () {
            deleted= true;
            bigloop= window.clearInterval(bigloop);
            var thistr=$(this).closest('tr');
            thistr.remove();
            $('#monitor').button('enable');

            $('#status_table tbody tr').find('td:first').text(function(index){
               return ++index;

            });
        });

그러나 다시 비활성화되기 전에 잠시 활성화되었습니다. clearInterval로부터 프로그램을 얻을 setInterval기능?


문제가 loopname두 번째 스 니펫에있을 수 있습니까? 그게 뭐야?
bfavaretto 2013 년

opps 오타. clearloop(loopname)를 포함 하는 함수 가 clearInterval있지만 단순화하기 위해 위의 코드에서 직접 변경했습니다.
yvonnezoe

답변:


212

그래 넌 할수있어. 테스트 할 수도 있습니다.

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

이 예에서이 타이머 i는 5에 도달하면 지워 집니다.


4
내가 참조. 항상 지역 변수 여야합니까? 제 경우에는 clearInterval을 호출하는 외부 함수가 있기 때문에 전역으로 설정했습니다. 또한 현재 2 setInterval이 있고 충돌하고 있습니다. /
yvonnezoe

나는이 시점에서 붙어 것, 여기에 질문이 clearInterval(가) 경우 setInterval/ 었소 전혀 시작 다른 곳이 중지되었습니다?
yvonnezoe

@yvonnezoe가 답변을 업데이트했으며 그것은 아닙니다. 간격 당 실행되는 함수는 다시 실행되지 않기 전에 완료됩니다. 그러나 질문의 ​​경우 여러 타이머가 있습니다. 나는 당신의 접근 방식을 다시 생각할 것을 제안합니다.
Joseph

네, 명확히 해주셔서 감사합니다! :) 내 프로그램에서 논리 오류가 있어야합니다.
yvonnezoe

1
이 접근 방식이 효과가 있다는 사실은 내 마음을 흔들어 놓습니다. 변수 정의 자체에서 변수를 참조하고 있습니다. 여전히 '타이머'가 무엇인지 정의하고 clearInterval에 대한 인수로 호출하는 경우 어떻게 작동합니까?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.