为了账号安全,请及时绑定邮箱和手机立即绑定

删除所有特定类型的事件侦听器

删除所有特定类型的事件侦听器

摇曳的蔷薇 2019-11-08 12:58:29
我想删除使用添加的所有特定类型的事件监听器addEventListener()。我看到的所有资源都在说您需要这样做:elem.addEventListener('mousedown',specific_function);elem.removeEventListener('mousedown',specific_function);但是我希望能够在不知道当前状态的情况下清除它,如下所示:elem.addEventListener('mousedown',specific_function);elem.removeEventListener('mousedown');
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

如果不拦截addEventListener呼叫并跟踪侦听器,或者不幸的是使用允许此类功能的库,则无法实现。如果可以访问listeners集合,但未实现该功能,那就应该是这样。


您可以做的最接近的事情是通过克隆元素来删除所有侦听器,这不会克隆侦听器集合。


注意:这还将删除元素子级上的侦听器。


var el = document.getElementById('el-id'),

    elClone = el.cloneNode(true);


el.parentNode.replaceChild(elClone, el);


查看完整回答
反对 回复 2019-11-08
?
青春有我

TA贡献1784条经验 获得超8个赞

如果通过删除侦听器的唯一目的是阻止它们运行,则可以将事件侦听器添加到捕获并取消给定类型的所有事件的窗口中:


window.addEventListener(type, function (event) {

    event.stopPropagation();

}, true);

传入true第三个参数会导致事件在下传中被捕获。停止传播意味着事件永远不会到达正在侦听该事件的侦听器。


查看完整回答
反对 回复 2019-11-08
?
冉冉说

TA贡献1877条经验 获得超1个赞

我知道这很老了,但是我遇到了类似的问题,没有真正的答案,我想从文档中删除所有“ keydown”事件侦听器。我没有删除它们,而是覆盖了addEventListener以在它们被添加之前忽略它们,类似于上面的Toms回答,通过在加载任何其他脚本之前添加它来实现:


<script type="text/javascript">

    var current = document.addEventListener;

    document.addEventListener = function (type, listener) {

        if(type =="keydown")

        {

            //do nothing

        }

        else

        {

            var args = [];

            args[0] = type;

            args[1] = listener;

            current.apply(this, args);

        }

    };

</script>


查看完整回答
反对 回复 2019-11-08
  • 3 回答
  • 0 关注
  • 509 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号