【问题标题】:How do I remove all events of a type from an element如何从元素中删除一个类型的所有事件
【发布时间】:2011-01-19 01:38:04
【问题描述】:

我想从某个 DOM 元素中删除所有点击事件。如何?有removeEventListener,但需要附加函数。

有没有办法删除 1 种类型的所有附加事件(或者只是 ALL,也可以)?

格拉齐

【问题讨论】:

    标签: javascript events dom javascript-events


    【解决方案1】:

    这篇文章可能会有用:

    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 的名称,或者您认为最好的方式。

    【讨论】:

    • 这是一个可能有用的想法(尽管它被过度编码)但我看不出它与问题有什么关系......
    • 我不使用 jQuery。这也是一个很奇怪的功能:.unbind()取消绑定所有事件然后只删除onclick?奇怪的。递归......也很奇怪。为什么不$element.find('*').unbind()
    【解决方案2】:

    不幸的是,DOM 规范中没有方法可以在不知道侦听器函数的情况下列出或删除事件侦听器。

    您可以做的最好的事情是创建一个相同类型的新元素,复制所有属性并将子元素从原始元素移动到新元素。

    【讨论】:

      【解决方案3】:

      你没有提到你是否使用库来协助 DOM 操作,但如果你使用 jQuery,它就像 $(domelement).unbind('click'); 一样简单。 记录在这里:http://api.jquery.com/unbind/

      【讨论】:

      • 我没有使用框架。我会看看 jQuery 是如何做到的并使用它 =)
      【解决方案4】:

      如果你想移除所有的事件监听器,如何为 onclick 事件分配一个空函数?

      <YOUR_HTML_ELEMENT>.onclick=function(){};
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-06
        • 2014-05-04
        • 2018-05-13
        • 1970-01-01
        • 2011-06-22
        • 2017-01-22
        • 2012-09-13
        • 2018-05-05
        相关资源
        最近更新 更多