2012-01-20 2 views

답변

0

이 시도 :

var intervalId = null; 

$('.auto-check').click(function(){ 
if($('input[name=autorefresh]').is(':checked') == true) { 
    intervalId = setInterval(load,4000); 
} else { 
    alert('Auto Refresh is off'); 
    clearInterval(intervalId); 
} 
}); 
1

당신은 intervalId을 유지해야합니다. 귀하의 경우에는 로컬로 선언하고 기능 후에는 손실됩니다. 함수 밖에서 선언하고 내부적으로 정의하면 유효합니다. 다른 사람이 언급 한 것처럼

var intervalId; 

$(".auto-check").click(function(){ 
if($('input[name=autorefresh]').is(':checked') == true){ 
    intervalId = setInterval(load,4000); 

} 
else{ 
    alert("Auto Refresh is off"); 
    clearInterval(intervalId); 
} 

}); 
+0

감사합니다. 그 일이야! –

0

, 당신은 요소 (들)을 클릭 한 다음, 그것은 동봉되는 함수의 범위보다 크게 새로운 콜백 함수를 당신의 간격 객체의 범위를 필요 완전히 새로운 범위로 생성됩니다. 간격은 클릭 할 때마다 완전히 새로운 개체가됩니다.

EDIT : 긴 비디오를 보면서 범위 체인 및 실행 컨텍스트에 대한 자세한 설명을 제공하며 함수가 실행될 때 발생하는 상황을 자세히 설명합니다. 그냥 인수를 위해 http://googlecode.blogspot.com/2009/06/nicholas-c-zakas-speed-up-your.html

3

이 약

$(".auto-check").click(function(){ 
    var elem = $('input[name=autorefresh]' 
    if(elem.is(':checked')){ 
     elem.data("interval-id", setInterval(load,4000)); 
    } 
    else{ 
     alert("Auto Refresh is off"); 
     clearInterval(elem.data("interval-id")); 
     elem.removeData("interval-id"); 
    } 
}); 
+0

+1은'.data()'를 사용하기 때문에 여러 요소로 확장 가능하며 전역 변수를 사용하지 않아야합니다. – jfriend00

0

무슨 일이 jQuery를 .data()를 사용하여 다른 방법을 : 설명은 대략 5 분 시작?

$(".auto-check").click(function(){ 
if($('input[name=autorefresh]').is(':checked') == true){ 
    window.intervalId = setInterval(load,4000); 

} 
else{ 
    alert("Auto Refresh is off"); 
    clearInterval(window.intervalId); 
} 

});

관련 문제