2010-06-01 72 views
7

我想解除所有特定容器內的所有元素的事件處理程序。像DIV一樣。但是這些事件已經被綁定/註冊,而不是使用jQuery。有些使用onclick="...."或使用普通的原生JavaScript綁定手動方式。jQuery .unbind()方法僅適用於jQuery創建的事件嗎?

但是,當我做這樣的事情

$('#TheDivContainer').find('div,td,tr,tbody,table').unbind(); 

它不會出現工作。這導致我相信.unbind()僅在事件最初由jQuery綁定時纔有效。

這是真的嗎?是否有另一種方法來解除一組元素中的所有事件?

謝謝!

回答

7

你說得對。正如在API

已附着 與.bind任何處理程序()可以與 .unbind被移除()。所有適當的事件類型

$('#TheDivContainer').find('div,td,tr,tbody,table') 
    .unbind('click') 
    .attr('onclick', ''); // edited to change null to '' 

等:

3

你總是可以做到這一點。

+0

我厭倦了你的建議...黯然它沒有工作 – 7wp 2010-06-01 20:01:54

+0

它適用於我 - 看到這個測試頁面:http://gutfullofbeer.net/unbind.html - 你可能嘗試用空字符串作爲第二個參數而不是null調用'attr()'! – Pointy 2010-06-01 21:48:05

3

取消綁定僅適用於jQuery創建的事件,因爲執行此操作的所有方法(addEventListener和attachEvent)都需要處理程序的節點,eventname,作爲參數。 bind負責存儲這些對你的..

順便說一句,DOM0風格事件listerens(只能由同一屬性設置爲別的東西一樣null去除.foo = function(...)