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

Почему не отменяется addEventListener?
Полный пример тут
Нужно открыть консоль, кликнуть на input и пару раз на пустое место.

document.querySelector('.set_month').addEventListener('click', openWin);

function openWin(e){
  ...
  document.getElementById('mcalend').addEventListener('click', clicker(parent));
  document.addEventListener('click', clickerOut(parent));
}

function clickerOut(parent){
  return function(e) {    
    ...
    console.log('...');
    document.removeEventListener('click', clickerOut);
  }
}
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Во-первых - всё срабатывает. Попытайтесь осознать разницу между "не срабатывает" и "срабатывает не так, как ожидается".

Во-вторых - обработчик остаётся висеть потому, что вы передаёте в removeEventListener не то, что передавали в addEventListener. Смотрите сами:

document.addEventListener('click', clickerOut(parent));

document.removeEventListener('click', clickerOut);

clickerOut(parent) и clickerOut - это что по-вашему, одно и то же? Никак нет.

Исправляем:

function clickerOut(parent) {
  return function handler(e) {    
    ...
    document.removeEventListener('click', handler);
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы