2011-03-14 45 views
2

如果我有2個jQuery腳本/插件(a + b),發起b和b的間隔(setInterval)。我怎樣才能清除Interval b從?JQuery clearInterval&範圍

我已經試過全局變量&傳遞一個intervalID從a到b但至今無果

我希望它取消,纔可以數到3:

// 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

請出示你的代碼。您必須將ID從b傳遞給a。 –

+1

我想你應該使用'setTimeout()',因爲它們更容易控制,並且你可以始終保持它無限循環,因爲我個人發現間隔很難處理 – Val

回答

1

我想你如果你想堅持setInterval有兩種可能性。無論是從插件乙返回ID:

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.對象通過引用傳遞:

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中設置了(確切地說,你的答案的第1部分表示)。我更喜歡你的解決方案,因爲它更簡化。非常棒,非常感謝你 – Oppdal

+0

@Oppdal:不客氣:) –