【发布时间】:2020-02-26 07:33:27
【问题描述】:
这是创建点击处理程序的原始语句。
const cells = document.querySelectorAll(".cell")
cells.forEach(function(cell) {
cell.addEventListener('click', onCellClicked.bind(this, cell.id));
})
下面我调用包含方法removeEventListener() 的removeEventhandlers() 函数。
此功能如何不起作用并且不会产生错误消息。
谁能帮我解决这个问题?
if (checkForWin(oSelectionArray) === true) {
insertWinOrLossImage('ticTacToeAssets/Assets/you win image.png', 'youWin', 'playerScore', wonOrLost = winOrLooseObj.won)
removeEventHandlers()
} else if (checkForWin(xSelectionArray) === true) {
insertWinOrLossImage('ticTacToeAssets/Assets/you loose image.png', 'youLoose', 'CPUscore', wonOrLost = winOrLooseObj.lost)
removeEventHandlers()
} else if (oSelectionArray.length === 5) {
insertWinOrLossImage('ticTacToeAssets/Assets/noWinner.png', 'draw', 'drawScore', wonOrLost = winOrLooseObj.draw)
removeEventHandlers()
}
}
function removeEventHandlers() {
const cellsToRemoveEventhandlers = document.querySelectorAll(".cell")
cellsToRemoveEventhandlers.forEach(function(cell) {
cell.removeEventListener('click', onCellClicked.bind(window));
})
}
【问题讨论】:
-
要真正删除处理程序,您需要一个指向您首先添加的函数的指针。
.bind()将围绕该函数创建一个新包装器,因此您尝试删除的不是您之前添加的包装器。旁注:也许看看委托事件 - 这只会将一个处理程序附加到某个容器,而不是单独添加处理程序。
标签: javascript removeeventlistener