任何人都可以告诉我为什么'tileClick'事件侦听器没有在此函数的底部被移除?该代码完整,有效,并且我没有错误。我甚至可以在for循环中引用console.log并打印出所有的DOM元素。但是,事件监听器仍在继续。我卡住了!无法从DOM元素中移除事件侦听器
function tileSelection(dieTotal) {
var openTiles = document.getElementsByClassName('openTile'),
dieAmountLeft = dieTotal;
document.getElementById('total').innerHTML = dieAmountLeft;
for(var i=0; i<openTiles.length; i++){
openTiles[i].addEventListener('click',function tileClick(){
// TODO: Must remove event listener!!!
this.classList.toggle('selectedTile');
if(this.classList.contains('selectedTile')){
dieAmountLeft -= parseInt(this.getAttribute('data-tile-val'));
if(dieAmountLeft >= 0){
document.getElementById('total').innerHTML = dieAmountLeft;
}else{
dieAmountLeft += parseInt(this.getAttribute('data-tile-val'));
this.classList.toggle('selectedTile');
}
} else {
dieAmountLeft += parseInt(this.getAttribute('data-tile-val'));
document.getElementById('total').innerHTML = dieAmountLeft;
}
if(dieAmountLeft === 0){
for(var t=0; t<openTiles.length; t++){
openTiles[t].removeEventListener('click',tileClick);
}
newTurn();
}
});
}
}
尝试不使用'tileClick'参数。 – artm 2014-12-05 00:27:21
我很确定它需要参数。我用另一种方法做类似的事情。然而,这是一个for循环,因为它在多个元素上。 – gregdillon 2014-12-05 00:53:11
[更新或更改或删除/重置Javascript事件侦听器]的可能重复(http://stackoverflow.com/questions/26007354/update-or-change-or-remove-reset-javascript-event-listener) – 2014-12-05 01:50:39