Javascript 如何删除eventListener。removeEventListener不';行不通
我有一个“开始游戏”按钮,当你点击游戏开始时,按钮上的单词变成“重复”——随机选择一张牌,播放该牌单词的声音,你需要猜它是哪张牌。但是当游戏开始时,如果你按下这个按钮,那么它应该已经作为一个中继器工作了,也就是说,这样你就可以再次听到这个单词了。如何在按下按钮时删除新词的播放,以及如何重复已发声的新词。RemoveEventListener不起作用。当我点击时,它会同时播放新旧单词Javascript 如何删除eventListener。removeEventListener不';行不通,javascript,dom,Javascript,Dom,我有一个“开始游戏”按钮,当你点击游戏开始时,按钮上的单词变成“重复”——随机选择一张牌,播放该牌单词的声音,你需要猜它是哪张牌。但是当游戏开始时,如果你按下这个按钮,那么它应该已经作为一个中继器工作了,也就是说,这样你就可以再次听到这个单词了。如何在按下按钮时删除新词的播放,以及如何重复已发声的新词。RemoveEventListener不起作用。当我点击时,它会同时播放新旧单词 const startGameBtn = document.getElementById('start-game'
const startGameBtn = document.getElementById('start-game');
startGameBtn.addEventListener('click', function() {
startGameBtn.innerHTML = 'Repeat';
startGameBtn.classList.add('repeat');
startGame();
})
startGameBtn.removeEventListener('click', function() {
startGame()
});
function startGame() {
let randomCard = createRandomCard();
randomCard.querySelector('audio').play();
document.getElementById('category').addEventListener('click', (e) => {
if(document.body.classList.contains('game-mode')) {
if(e.target.closest('.card-item') === randomCard) {
e.target.closest('.card-item').classList.add('checked-card');
randomCard = createRandomCard();
setTimeout(function(){ randomCard.querySelector('audio').play(); }, 2500);
} else {
let error = 'audio/error.mp3';
playAudio(error)
}
}
})
document.querySelector('#start-game').addEventListener('click', function() {
randomCard.querySelector('audio').play();
})
}
使用
addEventListener
时,使用一个匿名函数调用startName
函数,并在按钮上设置innerHTML
和类
您在
removeEventListener
中使用的函数也是匿名的,因此不能与在addEventListener
中使用的函数相同。这将导致removeEventListener
调用不删除侦听器,因为它根本不知道要删除什么
因此,创建一个对(非匿名)函数的引用,并将该引用传递给
addEventListener
和removeEventListener
const startGameBtn = document.getElementById('start-game');
// Create reference to function.
const onStartClick = () => {
startGameBtn.innerHTML = 'Repeat';
startGameBtn.classList.add('repeat');
startGame();
};
// Use reference in adding and removing the event listeners.
startGameBtn.addEventListener('click', onStartClick);
startGameBtn.removeEventListener('click', onStartClick);
至于代码的其余部分,请记住,每当您在单击时执行的函数中使用
addEventListener
时,每次单击后都会添加一个新的侦听器。这可能会导致意外行为。removeEventListener
应使用对与addEventListener
一起使用的相同函数的引用,否则它将不起作用。@EmielZuurbier但我删除了相同的函数startName。或者我不明白