我想删除使用addEventListener()添加的所有特定类型的事件侦听器。我所看到的所有资源都在告诉你需要这样做:

elem.addEventListener('mousedown',specific_function);
elem.removeEventListener('mousedown',specific_function);

但我希望能够在不知道它目前是什么情况下清除它,就像这样:

elem.addEventListener('mousedown',specific_function);
elem.removeEventListener('mousedown');

当前回答

 var events = [event_1, event_2,event_3]  // your events

//make a for loop of your events and remove them all in a single instance

 for (let i in events){
    canvas_1.removeEventListener("mousedown", events[i], false)
}

其他回答

通过一行js删除元素中的所有监听器:

element.parentNode.innerHTML += '';

你也可以重写'yourElement.addEventListener()'方法,并使用'.apply()'方法像正常一样执行侦听器,但在进程中拦截函数。如:

<script type="text/javascript">

    var args = [];
    var orginalAddEvent = yourElement.addEventListener;

    yourElement.addEventListener = function() {
        //console.log(arguments);
        args[args.length] = arguments[0];
        args[args.length] = arguments[1];
        orginalAddEvent.apply(this, arguments);
    };

    function removeListeners() {
        for(var n=0;n<args.length;n+=2) {
            yourElement.removeEventListener(args[n], args[n+1]);
        }
    }

    removeListeners();

</script>

此脚本必须在页面加载时运行,否则可能无法拦截所有事件侦听器。

确保在使用之前删除' removelistener()'调用。

我知道这是旧的,但我有一个类似的问题,没有真正的答案,我想从文档中删除所有按键事件侦听器。我没有删除它们,而是重写addEventListener,在添加它们之前忽略它们,类似于tom上面的回答,在加载任何其他脚本之前添加这个:

<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>

如果不拦截addEventListener调用并跟踪侦听器,或者使用允许这些功能的库,这是不可能的。如果监听器集合是可访问的,但没有实现该特性,则会出现这种情况。

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

注意:这也会删除element子元素上的监听器。

var el = document.getElementById('el-id'),
    elClone = el.cloneNode(true);

el.parentNode.replaceChild(elClone, el);

因此,这个函数将删除元素上的大部分指定侦听器类型:

function removeListenersFromElement(element, listenerType){
  const listeners = getEventListeners(element)[listenerType];
  let l = listeners.length;
  for(let i = l-1; i >=0; i--){
    removeEventListener(listenerType, listeners[i].listener);
  }
 }

有一些罕见的例外,其中一个不能删除的原因。