Javascript事件异常行为,removeEventListener不工作
我试图通过在处理完事件侦听器后删除它来阻止事件被多次调用。我需要能够多次调用这些函数 但是,我当前的解决方案似乎并没有从ImageVillace中删除事件侦听器,因为当我第二次调用这些函数时,killRacer最终会杀死第一次作为目标的同一个元素以及新目标。killRacer在第二次调用时不应该引用第一个映像,但它会删除第一次指向的同一个映像 以下是对我的问题非常重要的部分的相关功能Javascript事件异常行为,removeEventListener不工作,javascript,function,events,Javascript,Function,Events,我试图通过在处理完事件侦听器后删除它来阻止事件被多次调用。我需要能够多次调用这些函数 但是,我当前的解决方案似乎并没有从ImageVillace中删除事件侦听器,因为当我第二次调用这些函数时,killRacer最终会杀死第一次作为目标的同一个元素以及新目标。killRacer在第二次调用时不应该引用第一个映像,但它会删除第一次指向的同一个映像 以下是对我的问题非常重要的部分的相关功能 function killRacer() { var listOfRaceImgs = getListO
function killRacer() {
var listOfRaceImgs = getListOfRaceImages();
var killRacerTimerID = setInterval(moveEvilRaceImage.bind(null, randomRacer), 40);
imageEvilRace.addEventListener("stopKiller", stopMovingKillerImage.bind(null, killRacerTimerID, randomRacer));
}
function moveEvilRaceImage(imageToKill) {
imageEvilRace.dispatchEvent(stopKillerEvent);
}
function stopMovingKillerImage(killRacerTimerID, randomRacer) {
clearInterval(killRacerTimerID);
randomRacer.style.display = "none";
randomRacer.style.left = 0 + "px";
imageEvilRace.src = explosionImageSource;
imageEvilRace.removeEventListener("stopKiller", stopMovingKillerImage);
}
绑定回调是stopMovingKillerImage.bindnull、killRacerTimerID、randomRacer,但您尝试解除绑定stopMovingKillerImage。它们是两种不同的功能
我将创建一个包装器函数来处理单次使用事件处理程序的正确函数的存储,如下所示:
function bindOnce(object, event, callback) {
var new_callback = function() {
callback.apply(this, arguments);
object.removeEventListener(event, new_callback)
};
object.addEventListener(event, new_callback);
}
bindOnce(imageEvilRace, "stopKiller", stopMovingKillerImage.bind(null, killRacerTimerID, randomRacer));