2010-06-01 69 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(...)