2011-03-14 51 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:不客气:) –