我正在開發一些在其他許多網站上加載的javascript小部件。如何從javascript小部件中刪除所有jquery現場活動
當窗口小部件加載時,我綁定鏈接和按鈕上的jQuery實時事件。 例如:
$('.my-submit').live('click', function() {...});
...
$('.my-link').live('click', function() {...});
所以,問題是我怎麼能刪除所有現場活動僅適用於小部件的鏈接和按鈕?
我正在開發一些在其他許多網站上加載的javascript小部件。如何從javascript小部件中刪除所有jquery現場活動
當窗口小部件加載時,我綁定鏈接和按鈕上的jQuery實時事件。 例如:
$('.my-submit').live('click', function() {...});
...
$('.my-link').live('click', function() {...});
所以,問題是我怎麼能刪除所有現場活動僅適用於小部件的鏈接和按鈕?
簡單的方式做,這是一個命名空間綁定,並刪除所有名稱空間的事件:
$('.my-submit').live('click.myPlugin', function() {...});
你就可以調用die
與命名空間:
$('.my-submit').die('click.myPlugin'); // only myPlugin events are removed
更好的方法是使用jQuery的1.7引入了on
和off
功能。這是處理結合和非結合事件遠遠優於方式:
$(document).on('click.myPlugin', '.my-submit', function() {...}))
.on('click.myPlugin', '.my-link', function() {...}));
$(document).off('click.myPlugin'); // remove all myPlugin functions
你可以試試JQuery.unbind()方法。你會這樣使用它:
$.('.my-link').unbind('click');
希望這會有所幫助。
你想用.die()
:
刪除以前附加的所有事件處理程序使用從 元素.live()。
在一個側面說明,你應該使用.live()
到.delegate()
(或.on()
取決於您的jQuery的版本),因爲它會提高性能和.live()
被棄用的移動jQuery 1.7。
$(<selector>).live(<event>, <handler>);
是一樣的:
$(document).delegate(<selector>, <event>, <handler>);
獎金使用.delegate()
是,你可以選擇你的根元素(你不會被強迫使用document
)。
一些文檔雅:
.die()
:http://api.jquery.com/die.delegate()
:http://api.jquery.com/delegate在jQuery 1.7的,所述.live()方法被棄用。使用.on()附加事件處理程序。老版本的jQuery用戶應優先使用.delegate(),而不要使用.live()。
參考自己的jQuery點:
使用或代表,這是不是一個問題。
如果你是jQuery 1.7+,我會顛倒Jasper建議的優先順序 - 直接轉到'.on()'而不是'.delegate()',因爲後者是前者的別名這更可能在未來被棄用。 – 2011-12-19 23:39:34