Не работает removeEventListener
При нажатии на Esc, не срабатывает removeEventListener на ивент 'keydown' и не могу понять почему.
const main = document.querySelector('main');
const isEscEvent = (evt) => {
return evt.key === 'Escape' || evt.key === 'Esc';
};
const closePopup = (element) => {
return () => {
main.removeChild(element);
document.removeEventListener('keydown', popupEscKeydown(element));
};
};
const popupEscKeydown = (element) => {
return (evt) => {
if (isEscEvent(evt)) {
evt.preventDefault();
closePopup(element)();
}
};
};
const successEvents = () => {
const successMessage = main.querySelector('.success');
document.addEventListener('keydown', popupEscKeydown(successMessage));
successMessage.addEventListener('click', closePopup(successMessage));
};
Ответы (1 шт):
Автор решения: Ruslan Mart
→ Ссылка
Потому что popupEscKeydown возвращает каждый раз новую функцию.
document.addEventListener('keydown', function handler(event) {
if (event.key.startsWith('Esc')) {
this.removeEventListener(event.type, handler);
}
});