2 回答
TA贡献1797条经验 获得超4个赞
每次开始游戏时,都会向所有方块添加事件侦听器:
function startGame() {
board.style.pointerEvents = 'all';
target.innerHTML = randomSquare;
gameTime()
document.querySelectorAll('.square').forEach(item => {
item.addEventListener('click', event => { ////// <<<< HERE
第二次运行游戏时,单击的方块中有 2 个侦听器。
第一个运行正常,符合预期。但改变 randomSquare 值。
第二个事件会报告失败,因为现在点击的方块不再是 randomSquare
当你运行游戏 100 次时,你就有了 6400 个听众!!!!
TA贡献1784条经验 获得超9个赞
第一种方法: 在附加新侦听器之前删除所有侦听器(如果存在)
function onClick(event) {
const item = event.target;
if (item.id == randomSquare) {
console.log("correct", item);
score++;
tries++;
scoreOutput.innerHTML = score;
randomSquare = rndSq(squareset);
target.innerHTML = randomSquare;
scoreOutput.classList.add('correct');
scoreOutput.classList.remove('incorrect');
} else {
console.log("incorrect", item);
tries++;
// scoreDisplay.innerHTML = score;
randomSquare = rndSq(squareset);
target.innerHTML = randomSquare;
scoreOutput.classList.remove('correct');
scoreOutput.classList.add('incorrect');
};
}
function startGame() {
console.log("startGame");
//To make the board active
board.style.pointerEvents = 'all';
//First Target
target.innerHTML = randomSquare;
//Start Game timer
gameTime();
document.querySelectorAll('.square').forEach(item => {
item.removeEventListener('click', onClick);
item.addEventListener('click', onClick);
})
};
或者第二种方式,仅附加侦听器一次:
document.querySelectorAll('.square').forEach(item => {
item.addEventListener('click', onClick);
})
function startGame() {
console.log("startGame");
//To make the board active
board.style.pointerEvents = 'all';
//First Target
target.innerHTML = randomSquare;
//Start Game timer
gameTime();
};
- 2 回答
- 0 关注
- 94 浏览
添加回答
举报