2011-03-14 3 views
2

jQuery 스크립트/플러그인 2 개 (a + b)가있는 경우 a와 b는 간격 (setInterval)을가집니다. 어떻게 fromInterval b를 제거 할 수 있습니까?JQuery clearInterval & scope

내가 전역 변수를 시도했습니다 &

가 나는 그것이 3 셀 수 전에 취소 할 아무 소용이 아직 있지만에서 ㄱ하는 intervalID을 통과 :

// Plugin a 
; (function($) { 
    var xIntervalID; 
    jQuery.fn.CallA = function() { 
     $().IamB(xIntervalID, 4000); 
     setTimeout(function() { 
      $().CancelA(xIntervalID); 
     }, 11000); 
    } 
    jQuery.fn.CancelA = function(IntervalID) { 
     clearInterval(IntervalID); 
     alert('Cancel called!'); 
    } 

})(jQuery); 

// Plugin b 
; (function($) { 
    jQuery.fn.IamB = function(xIntervalID,Interval) { 
     var Something = 0; 
     xIntervalID = setInterval(function() { 
      Something += 1; 
      alert(Something); 
     }, Interval); 
    } 

})(jQuery); 



// Start 
$().CallA(); 
+1

이 코드를 제시해주십시오. b에서 a로 ID를 전달해야합니다. –

+1

나는'setTimeout()'을 좀 더 쉽게 제어 할 수 있어야한다고 생각한다. 그리고 나는 개인적으로 간격을 찾기가 더 어려워 항상 무한 루프를 유지할 수있다. – Val

답변

1

을 나는 당신을 생각 setInterval을 사용하려면 두 가지 가능성이 있습니다.

jQuery.fn.CallA = function() { 
    var xIntervalID = $().IamB(xIntervalID, 4000); 
    setTimeout(function() { 
     $().CancelA(xIntervalID); 
    }, 11000); 
} 

jQuery.fn.IamB = function(Interval) { 
    var Something = 0; 
    return setInterval(function() { 
     Something += 1; 
     alert(Something); 
    }, Interval); 
} 

또는 B. 객체 참조에 의해 전달되는 플러그인하는 객체을 통과 : 어느 플러그인 B에서 ID를 반환

jQuery.fn.CallA = function() { 
    var xIntervalID = {}; 
    $().IamB(ID, 4000); 
    setTimeout(function() { 
     $().CancelA(xIntervalID.id); 
    }, 11000); 
} 

// in B: 

jQuery.fn.IamB = function(xIntervalID,Interval) { 
    var Something = 0; 
    xIntervalID.id = setInterval(function() { 
     Something += 1; 
     alert(Something); 
    }, Interval); 
} 
+0

Felix, 고맙다. 그것은 콜백 함수를 사용하여 IntervalID를 b에 설정된 후에 다시 전달합니다 (정확히 대답의 part1이 의미 함). 더 능률적이기 때문에 나는 당신의 솔루션을 선호합니다. 최고, 너무 고마워. – Oppdal

+0

@Oppdal : 너 환영합니다. :) –