【发布时间】:2011-01-19 01:38:04
【问题描述】:
我想从某个 DOM 元素中删除所有点击事件。如何?有removeEventListener,但需要附加函数。
有没有办法删除 1 种类型的所有附加事件(或者只是 ALL,也可以)?
格拉齐
【问题讨论】:
标签: javascript events dom javascript-events
我想从某个 DOM 元素中删除所有点击事件。如何?有removeEventListener,但需要附加函数。
有没有办法删除 1 种类型的所有附加事件(或者只是 ALL,也可以)?
格拉齐
【问题讨论】:
标签: javascript events dom javascript-events
这篇文章可能会有用:
http://www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/
其中一个特别之处是删除所有点击事件的递归函数。请记住,如果单击事件是使用 jQuery 创建的,则 jQuery 将删除单击事件。文章中给出的函数将删除使用 jQuery 创建的和未创建的。给出的函数是这样的:
function RecursiveUnbind($jElement) {
// remove this element's and all of its children's click events
$jElement.unbind();
$jElement.removeAttr('onclick');
$jElement.children().each(function () {
RecursiveUnbind($(this));
});
}
你可以这样调用函数:
RecursiveUnbind($('#container'));
该函数采用 jQuery 对象参数,但您可以轻松地将其更改为传递一个字符串作为元素 ID 的名称,或者您认为最好的方式。
【讨论】:
.unbind()取消绑定所有事件然后只删除onclick?奇怪的。递归......也很奇怪。为什么不$element.find('*').unbind()?
不幸的是,DOM 规范中没有方法可以在不知道侦听器函数的情况下列出或删除事件侦听器。
您可以做的最好的事情是创建一个相同类型的新元素,复制所有属性并将子元素从原始元素移动到新元素。
【讨论】:
你没有提到你是否使用库来协助 DOM 操作,但如果你使用 jQuery,它就像 $(domelement).unbind('click'); 一样简单。 记录在这里:http://api.jquery.com/unbind/
【讨论】:
如果你想移除所有的事件监听器,如何为 onclick 事件分配一个空函数?
<YOUR_HTML_ELEMENT>.onclick=function(){};
【讨论】: