Почему не срабатывает removeEventListener?

<input type="button" id="a" value="off">
let btn = document.getElementById('a');
btn.addEventListener('click', () => {
  document.addEventListener('click', clicker(btn), true);
  btn.value = 'Listen';
});

function clicker(btn) {
  return function handler(e) {    
    console.log(btn);
    document.removeEventListener('click', clicker(btn));
    document.removeEventListener('click', handler);
    btn.value = 'off';
  }
}

Этот же код:
https://codepen.io/workcode/pen/QWNXOpK
  • Вопрос задан
  • 84 просмотра
Решения вопроса 2
MagnusDidNotBetray
@MagnusDidNotBetray
Самый елеустремленный человек
document.removeEventListener('click', handler, true);
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
Во-первых - срабатывает. Постарайтесь осознать разницу между "не срабатывает" и "срабатывает не так, как ожидалось".

Во-вторых, обработчик остаётся висеть потому, что

Удаление перехватывающего обработчика никак не затрагивает не-перехватывающюю версию этого же обработчика, и наоборот.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы