jQuery .unbind()方法只适用于jQuery创建的事件吗?

时间:2010-06-01 19:25:46

标签: javascript jquery javascript-events

我正在尝试取消绑定特定容器内所有元素的所有事件处理程序。像DIV一样。但是那些事件已被绑定/注册而不是使用jQuery。有些是使用onclick="...."或使用常规本机JavaScript的手动方式绑定的。

但是当我做这样的事情时

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

它似乎不起作用。这让我相信.unbind()仅在事件最初由jQuery绑定时才有效。

这是真的吗?是否有另一种解除一组元素中所有事件的方法?

谢谢!

3 个答案:

答案 0 :(得分:7)

你是对的。与API中一样:

  

已附加的任何处理程序   使用.bind()可以删除   .unbind()。

答案 1 :(得分:3)

您可以随时执行此操作:

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

等。适用于所有适当的事件类型。

答案 2 :(得分:3)

Unbind只适用于jQuery创建的事件,因为执行此操作的所有方法(addEventListener和attachEvent)都需要将节点,事件名,作为参数。 bind负责为您存储这些内容..

顺便说一下,DOM0样式事件监听(.foo = function(...)只能通过将相同属性设置为null之类的其他内容来删除。