Javascript 与.removeEventListener存在问题。I';我无法从HTML元素列表中删除它

Javascript 与.removeEventListener存在问题。I';我无法从HTML元素列表中删除它,javascript,dom,event-handling,addeventlistener,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].addEventLis

我试图从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);
}
}
if(moveChecker==8){
对于(var i=0;i4){
moveHTML.previousElementSibling.innerHTML='☆;

'; } else{moveHTML.previousElementSibling.innerHTML='☆;☆;

'} } },对); } }
我想这是因为我使用了匿名函数。但是,当我尝试定义它时(例如):

let listener=function(e){
e、 预防默认值();
检票员(e);
如果(移动>2){
如果(移动>4){
moveHTML.previousElementSibling.innerHTML='☆;

'; } else{moveHTML.previousElementSibling.innerHTML='☆;☆;

'} } } 如果(moveChecker==8){
对于(var i=0;i要删除事件侦听器,您需要对最初使用调用的函数进行静态引用。
addEventListener
。使用
removeEventListener('click',function()…
定义一个全新的函数(该函数显然没有被
add
ed)预先定义处理程序,然后将其作为参数传递给
addEventListener
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);
  }
}
函数列表器(e){
e、 预防默认值();
检票员(e);
如果(移动>2){
如果(移动>4){
moveHTML.previousElementSibling.innerHTML='☆;

'; }否则{ moveHTML.previousElementSibling.innerHTML='&☆;&☆;

'; } } } 如果(moveChecker==8){ 对于(变量i=0;i
我尝试了此操作,但代码仍在触发EventListener。那么您剩下的问题不在您发布的代码范围内:它在这里工作。您介意看看这里的代码吗:。我无法确定是什么导致了问题。目前,该部分仅在加载脚本时以及
mov时运行一次eChecker
被初始化为
0
。因此,执行
else
块的是监听器。但是如果else块只在pageload上运行一次。我不知道您想做什么,但您可能需要将其全部移动到一个按需调用的函数中,而不是只运行一次。我it’他能想出来,谢谢你的帮助!
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);
  }
}