Google Maps API v3: как удалить прослушиватель событий?


91

Как удалить прослушиватель событий bounds_changed в Google Maps API v3 ?

google.maps.event.removeListener(_???_);    

1
Думаю, я нашел то, что вы искали. Это была третья функция события в документации API.
Майку Мори,

1
Я чувствую твою боль. Вы могли подумать, что эта документация находится на code.google.com/apis/maps/documentation/javascript/events.html, но это не так. Grrrr
Drew LeSueur

Ответы:


152

Обычно ответы на такие вопросы можно найти в документации Google Maps API.

Как сказал Эндрю, addListener возвращает дескриптор, который вы можете использовать позже, чтобы удалить слушателя. Это потому, что у одного события может быть много слушателей, и чтобы удалить их, вы должны сохранить ссылку на каждый из прикрепленных слушателей.

Также есть функция, которая удаляет всех слушателей одновременно:

clearListeners(instance:Object, eventName:string);
//In your case:
google.maps.event.clearListeners(map, 'bounds_changed');

Вот справочник по API Карт Google, где вы можете прочитать об этом.


2
Так удалит ли это ТОЛЬКО событие bounds_changed?
mp_

В чем преимущества этого метода по сравнению с методом Эндрюса?
mp_

Это удаляет всех слушателей из события bounds_changed. Пока метод Андрея убирает один. Если вы не хотите где-то хранить дескриптор, и вам нужно беспокоиться только об 1 слушателе для данного события, тогда это правильный путь.
Майку Мори,

Как я уже сказал, у событий может быть много слушателей, но похоже, что вы просто используете 1 в своем коде. Если вы поймете эту концепцию, вы увидите различное использование обеих функций. Также см. Ссылку, которую я предоставил, там есть хорошие объяснения для обеих этих функций.
Майку Мори,

2
Догадаться. google.maps.event.clearListeners(map, 'idle')работает. Но map.clearListeners('idle')не делает. Этот синтаксис работает для всего остального в API ( .addListenerи т. Д.). Странный.
Энди Мерсер,

93

addListener возвращает дескриптор, который позже можно передать removeListener:

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {

google.maps.event.removeListener(listenerHandle);

Значит, для слушателей больше нет статических переменных?
mp_

Слушателей нужно удалять по одному. Вы не можете их всех отвязать аля jQuery. Я знаю, потому что думал так же и тоже запутался в этом вопросе. В конце концов я решил это, и приведенный выше псевдокод примерно иллюстрирует, как я это сделал.
Эндрю

1
Драт! Ваш является лучшим ответом.
Эндрю

4
Для меня лучший ответ: это удаляет только созданный нами прослушиватель событий, и это не влияет на другие скрипты
Матье Наполи

2
Лучший ответ по двум причинам. Только удаляет фактического слушателя. Кроме того, в нем нет язвительности "Вы можете найти это в комментарии к документации API.
keithhackbarth

17

Кажется, это работает в текущей версии.

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {
    // Handler code.
});
listenerHandle.remove();

И что хорошо в этом подходе, так это то, что он listenerHandler.remove()работает и для слушателей уровня данных, т. Е. google.maps.data.addListenerПоскольку здесь НЕТ google.maps.data.removeListenerопределенного метода.
Кристофер Кинг


0

Если вы не могли каким-то образом удерживать объект слушателя, вы могли бы удалить слушателя (ов) напрямую как google.maps.event.clearListeners(objectListened, 'event');

Пример: google.maps.event.clearListeners(map, 'bounds_changed');

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.