removeEventListener не работает - PullRequest
       13

removeEventListener не работает

8 голосов
/ 29 апреля 2011

Я не знаю, что я делаю неправильно, но вот пример того, что я делаю, и это, похоже, не работает.

someDom.addEventListener('mousemove',function(ev) {self.onInputMove(ev)},false);

someDom.removeEventListener('mousemove',self.onInputMove);

Код removeEventListener выполняется, но он просто не удаляет слушателя 'mousemove'

Ответы [ 4 ]

26 голосов
/ 29 апреля 2011

removeEventListener удаляет слушателя, который точно соответствует добавленной функции.

В этом случае добавленная функция addEventListener была:

var some_func = function(ev) {
    self.onInputMove(ev);
};

Сохраните ссылку на актуальную функцию, и все будет хорошо. Так, например, должно работать следующее:

someDom.addEventListener('mousemove',self.onInputMove,false);

someDom.removeEventListener('mousemove',self.onInputMove,false);
6 голосов
/ 29 апреля 2011

onInputMove не является методом обратного вызова события. Так что вам нужно сделать что-то вроде:

var event = function(ev) {self.onInputMove(ev)};
someDom.addEventListener('mousemove', event,false);

someDom.removeEventListener('mousemove', event, false);
1 голос
/ 30 сентября 2014

Эта страница стоит первой при поиске этой / такой проблемы в Google. Итак, помимо уже упомянутых ответов, вот еще один интересный факт на будущее:

Оставление третьей необязательной переменной в addEventListener () для useCapture / useBubble (по умолчанию false) создает некоторые проблемы при удалении того же EventListener с тем же именем обратного вызова. Я столкнулся с этой проблемой при работе над Chrome. Не могу сказать о других браузерах.

Так что упомяните третью переменную явно как "false".

1 голос
/ 12 июля 2012

Зачем делать это самостоятельно, просто используйте следующее, чтобы привязать событие к элементу:

element.onmousemove = function(e) {
    // Some code here...
    alert("Mouse moved!");
};

Теперь, когда вы хотите удалить событие, просто сделайте это:

element.onmousemove = null;

Готово!

Надеюсь, это поможет вам, ребята!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...