遇到.removeEventListener问题。我无法将其从HTML元素列表中删除

时间:2018-04-13 02:51:52

标签: 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);
}
}

然后我不断收到错误,说明未定义&#39;。这发生在addEventListener行上。

1 个答案:

答案 0 :(得分:1)

要删除事件侦听器,您需要对最初调用MyData2 Group NO. A B C Group_Mean_D Group_Mean_E 1 1 yellow X 0.8 84 0.95 2 1 yellow X 0.5 84 0.95 3 2 yellow X 0.4 99.67 1.2 4 2 yellow Z 0.6 99.67 1.2 5 2 yellow Y 0.2 99.67 1.2 6 3 green X 0.3 757.5 9.5 7 3 green Y 0.1 757.5 9.5 的函数的静态引用。使用addEventListener定义了一个完全 new 函数(显然没有removeEventListener('click', function() ...编辑)预先定义处理程序,然后将其作为参数传递给add addEventListener 1}}和removeEventListener

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);
  }
}