不使用事件名称在javascript中删除文档的所有事件侦听器

时间:2017-11-18 07:16:41

标签: javascript addeventlistener

我必须删除添加到文档中的所有事件侦听器 所以根据THIS POST,我构建了一个这样的函数,但它显示TypeError: document.parentNode is null



var msg = document.getElementById('state-msg');
var button =  document.getElementById('removeListener');
document.addEventListener('keydown', function(e) {
  msg.textContent = 'keydown:' + e.keyCode;
});

document.addEventListener('keyup', function(e) {
  msg.textContent = 'keyup:' + e.keyCode;
});

document.addEventListener('keypress', function(e) {
  msg.textContent += 'keypress:' + e.keyCode;
});

button.addEventListener('click', function(e) {
  var elClone = document.cloneNode(true);
  document.parentNode.replaceChild(elClone, document);
});

Press any key and get the message here: <span id="state-msg"></span>
<button id = "removeListener">RemoveListener</button>
&#13;
&#13;
&#13;

这可能是一个非常基本的问题,但仍然没有成功,任何评论都会非常感激。

更新
我也尝试了document = elNode,但没有工作。

1 个答案:

答案 0 :(得分:1)

就个人而言,我会为事件监听器命名,因此您可以正确删除它们。 我得到了你想要做的事情。但是,由于这是document节点,因此您不太可能找到它的父节点。毕竟它是你的DOM树的根。 如果这是您绑定事件监听器的特定元素,那么您的方法将起作用。

  1. 您可以扩展addEventListener和removeEventListener,以便在以后可以在函数中使用的数据结构中注册函数,以便有条不紊地删除每个事件侦听器。 See this answer for details
  2. 另一个选择,如果你不介意转移到JQuery,就是使用JQuery来附加监听器,然后简单地使用$(document).off()将删除附加的监听器。它可能无法与本机addEventListener方法一起使用。