javascript - .removeEventListener 存在问题。我无法将其从 HTML 元素列表中删除

标签 javascript dom event-handling addeventlistener

我正在尝试从 HTML 列表中删除事件监听器,但无法使其正常工作。下面所示的代码并没有删除监听器。

if(moveChecker===8){
  for(var i=0; i<card.length;i++){
  card[i].removeEventListener('click', function(e){
    cardChecker(e);
}, true);
}
}
else{
for(var i=0; i<card.length;i++){
card[i].addEventListener('click', function(e){
  e.preventDefault();
  cardChecker(e);
  if (moves>2){
    if(moves>4){
      moveHTML.previousElementSibling.innerHTML = '<p>&#9734;</p>';
    }
    else {moveHTML.previousElementSibling.innerHTML = '<p>&#9734; &#9734;</p>';}
  }
}, true);
}
}

我认为这是由于我使用了匿名函数。但是,当我尝试定义它时(例如):

let listener = function(e){
  e.preventDefault();
  cardChecker(e);
  if (moves>2){
    if(moves>4){
      moveHTML.previousElementSibling.innerHTML = '<p>&#9734;</p>';
    }
    else {moveHTML.previousElementSibling.innerHTML = '<p>&#9734; &#9734;</p>';}
  }
}

if(moveChecker===8){
  for(var i=0; i<card.length;i++){
  card[i].removeEventListener('click', listener(e), true);
}
}
else{
for(var i=0; i<card.length;i++){
card[i].addEventListener('click', listener(e), true);
}
}

然后我不断收到错误消息,指出“e 未定义”。这发生在 addEventListener 行上。

最佳答案

要删除事件监听器,您需要对最初调用 addEventListener 的函数有一个静态引用。使用 removeEventListener('click', function() ... 定义一个全新的函数(显然尚未添加)预先处理程序,然后将其作为参数传递给 addEventListenerremoveEventListener:

function theListener(e) {
  e.preventDefault();
  cardChecker(e);
  if (moves > 2) {
    if (moves > 4) {
      moveHTML.previousElementSibling.innerHTML = '<p>&#9734;</p>';
    } else {
      moveHTML.previousElementSibling.innerHTML = '<p>&#9734; &#9734;</p>';
    }
  }
}
if (moveChecker === 8) {
  for (var i = 0; i < card.length; i++) {
    card[i].removeEventListener('click', theListener, true);
  }
} else {
  for (var i = 0; i < card.length; i++) {
    card[i].addEventListener('click', theListener, true);
  }
}

关于javascript - .removeEventListener 存在问题。我无法将其从 HTML 元素列表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49808577/

相关文章:

javascript - 如何在基本 Javascript 中将 "img"标签添加到 "p"元素?

c# - 如何将函数绑定(bind)到C#中控件数组中每个控件的Click事件

javascript - 无类型函数调用可能不接受类型参数 - Angular 5 http 调用

javascript - 报价生成器 JavaScript

javascript - 如何查找并修复未定义属性的类型错误

javascript - 获取点击元素的 ID 并将其包含在纯 JS 的函数中?

javascript - 使用 AJAX 调用 API 时,网站在打开后重定向到 index.php

javascript - 在jquery的类中插入html内容

java - GWT - FlexTable - 无法看到添加的行

Python + PyGame - 处理同时发生的鼠标和键盘事件