2011-12-19 18 views
0

我正在開發一些在其他許多網站上加載的javascript小部件。如何從javascript小部件中刪除所有jquery現場活動

當窗口小部件加載時,我綁定鏈接和按鈕上的jQuery實時事件。 例如:

$('.my-submit').live('click', function() {...}); 
... 
$('.my-link').live('click', function() {...}); 

所以,問題是我怎麼能刪除所有現場活動僅適用於小部件的鏈接和按鈕?

回答

3

簡單的方式做,這是一個命名空間綁定,並刪除所有名稱空間的事件:

$('.my-submit').live('click.myPlugin', function() {...}); 

你就可以調用die與命名空間:

$('.my-submit').die('click.myPlugin'); // only myPlugin events are removed 

更好的方法是使用jQuery的1.7引入了onoff功能。這是處理結合和非結合事件遠遠優於方式:

$(document).on('click.myPlugin', '.my-submit', function() {...})) 
      .on('click.myPlugin', '.my-link', function() {...})); 

$(document).off('click.myPlugin'); // remove all myPlugin functions 
0

你可以試試JQuery.unbind()方法。你會這樣使用它:

$.('.my-link').unbind('click'); 

希望這會有所幫助。

0

你想用.die()

刪除以前附加的所有事件處理程序使用從 元素.live()。

來源:http://api.jquery.com/die/

在一個側面說明,你應該使用.live().delegate()(或.on()取決於您的jQuery的版本),因爲它會提高性能和.live()被棄用的移動jQuery 1.7。

$(<selector>).live(<event>, <handler>); 

是一樣的:

$(document).delegate(<selector>, <event>, <handler>); 

獎金使用.delegate()是,你可以選擇你的根元素(你不會被強迫使用document)。

一些文檔雅:

+0

如果你是jQuery 1.7+,我會顛倒Jasper建議的優先順序 - 直接轉到'.on()'而不是'.delegate()',因爲後者是前者的別名這更可能在未來被棄用。 – 2011-12-19 23:39:34

1

在jQuery 1.7的,所述.live()方法被棄用。使用.on()附加事件處理程序。老版本的jQuery用戶應優先使用.delegate(),而不要使用.live()。

參考自己的jQuery點:

jQuery

使用或代表,這是不是一個問題。

相關問題