let popped = 0;
document.addEventListener('click', function(e){
if (e.target.className === "balloon"){
e.target.style.backgroundColor = "#ededed";
e.target.textContent = "POP!";
popped++;
removevent(e);
checkAllPopped();
}
});
function removevent(e) {
e.target.removeEventListener('click',function() {})
}
Я пытаюсь удалить событие, когда пользователь нажимает на div. Но как ни пытаюсь поставить removeEventListen, ни разу не получается. Я попытался сделать это с помощью пользовательской функции, например:
function abc(e) {
//some code
}
document.addEventListener('click',abc,true)
document.removeEventListener('click',abc,true)
Тем не менее, это тоже не сработало.
Если вы хотите удалить прослушиватель событий в каждом конкретном случае, рассмотрите возможность добавления отдельных прослушивателей событий в каждое всплывающее окно. Затем в функции-обработчике вы можете удалить его из каждого шарика, когда он «выскакивает».
let popped = 0;
const balloons = document.querySelectorAll('.balloon');
function handler(e){
if (e.target.className === "balloon"){
e.target.style.backgroundColor = "#ededed";
e.target.textContent = "POP!";
popped++;
console.info(popped);
e.target.removeEventListener('click', handler);
}
}
for (let balloon of balloons) {
balloon.addEventListener('click', handler);
}
<div class = "balloon">Balloon</div>
<div class = "balloon">Balloon</div>
<div class = "balloon">Balloon</div>
<div class = "balloon">Balloon</div>
<div class = "balloon">Balloon</div>
Не уверен, что это возможно с вашим нынешним подходом. Вы прикрепили прослушиватель событий к документу, поэтому вы будете перехватывать все события кликов ниже в дереве DOM. Я не верю, что вы можете избирательно игнорировать определенные элементы.
Что, если я добавлю события во все div с помощью querySelectorAll?
да, тогда, конечно, это было бы выполнимо! Позвольте мне посмотреть, смогу ли я что-нибудь подстроить
Я тоже попробую. Спасибо за помощь
ОК, обновляется с обработкой прослушивателей событий в каждом конкретном случае.
Это работает, но я пытаюсь сделать это с помощью removeEventListener.