Как добавить и удалить прослушиватель событий, используя функцию с параметрами? - PullRequest
26 голосов
/ 07 июня 2010

Извините, если это обычный вопрос, но я не смог найти ответы, которые показались бы уместными при поиске.

Если я прикрепляю слушателя событий так:

window.addEventListener('scroll', function() { check_pos(box); }, false);

не похоже, чтобы попытаться удалить его позже, например:

window.removeEventListener('scroll', function() { check_pos(box); }, false);

Я предполагаю, что это потому, что методы addEventListener и removeEventListener хотят ссылаться на одну и ту же функцию, в то время как я предоставил им анонимные функции, которые, хотя и идентичны в коде, буквально не совпадают.

Как я могу изменить свой код, чтобы заставить работать removeEventListener? Аргумент «box» относится к имени <iframe>, которое я отслеживаю на экране; то есть я хочу иметь возможность подписаться на событие scroll один раз для каждого моего <iframe> (количество варьируется), и как только функция check_pos() измеряет определенную позицию, она вызывает другую функцию, а также удалите прослушиватель событий, чтобы освободить системные ресурсы.

Я догадываюсь, что решение будет заключаться в закрытии и / или именовании анонимной функции, но я не совсем уверен, как это выглядит, и был бы признателен за конкретный пример.

Надеюсь, это имеет смысл. Спасибо за любую помощь!

Ответы [ 2 ]

17 голосов
/ 07 июня 2010

Вы пытались сохранить ссылку на анонимную функцию (как вы предлагали)?

Итак:

var listener = function() {
  check_pos(box);
};

window.addEventListener('scroll', listener, false);
...
window.removeEventListener('scroll', listener, false);

Документы Mozilla предполагают то же самое.

3 голосов
/ 16 октября 2012
var listener;

listener = function(){

if( window.target != anotherEvent.target )
{
    ...CODE where

    window.removeEventListener('click', listener , false);

};

window.addEventListener('click', listener ,false);
...