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 關注
- 134 瀏覽
添加回答
舉報