API de Google Maps v3: ¿Cómo eliminar un detector de eventos?

Respuestas:

152

Por lo general, puede encontrar respuestas a estas preguntas en la documentación de la API de Google Maps.

Como dijo Andrew, addListener devuelve un identificador que puede usar más tarde para eliminar el oyente. Esto se debe a que un solo evento puede tener muchos oyentes y, para eliminarlos, debe guardar una referencia a cada uno de los oyentes adjuntos.

También hay una función que elimina a todos los oyentes al mismo tiempo:

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

Aquí está la referencia de la API de Google Maps donde puede leer sobre ella.

Maiku Mori
fuente
2
Entonces, ¿esto eliminará SOLAMENTE el evento limits_changed?
mp_
¿Cuál es la ventaja / desventaja de usar este método frente al método de Andrews?
mp_
Esto elimina a todos los oyentes del evento limits_changed. Mientras que el método de Andrew elimina uno. Si no desea almacenar el identificador en algún lugar y solo tiene que preocuparse por 1 oyente para un evento determinado, este es el camino a seguir.
Maiku Mori
Como dije, los eventos pueden tener muchos oyentes, pero parece que solo estás usando 1 en tu código. Si comprende ese concepto, verá los diferentes usos de ambas funciones. También vea el enlace que proporcioné, tiene buenas explicaciones para ambas funciones.
Maiku Mori
2
Lo averigué. google.maps.event.clearListeners(map, 'idle')trabajos. Pero map.clearListeners('idle')no lo hace. Esa sintaxis funciona para todo lo demás en la API ( .addListener, etc.). Impar.
Andy Mercer
93

addListener devuelve un identificador que luego puede pasar a removeListener:

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

google.maps.event.removeListener(listenerHandle);
Andrés
fuente
¿Entonces ya no hay variables estáticas para los oyentes?
mp_
Los oyentes deben eliminarse uno por uno. No puede desvincularlos todos ala jQuery. Lo sé porque pensé lo mismo y también me confundí en este punto. Finalmente lo resolví y el pseudocódigo anterior ilustra aproximadamente cómo lo hice.
Andrew
1
¡Maldita sea! La tuya es una mejor respuesta.
Andrew
4
Mejor respuesta para mí, eso es eliminar solo el detector de eventos que creamos y no afecta los otros scripts
Matthieu Napoli
2
Mejor respuesta por dos razones. Solo, elimina al oyente real. Además, no tiene el sarcástico "Puede encontrarlo en el comentario de los documentos de la API.
keithhackbarth
16

Esto parece funcionar en la versión actual.

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {
    // Handler code.
});
listenerHandle.remove();
ether6
fuente
Y lo bueno de este enfoque es que también listenerHandler.remove()funciona para los oyentes de la capa de datos, es decir google.maps.data.addListener, ya que NO hay ningún google.maps.data.removeListenermétodo definido.
Christopher King
0

Si no pudiera mantener el objeto de escucha de alguna manera, podría eliminar los oyentes directamente como google.maps.event.clearListeners(objectListened, 'event');

Ex: google.maps.event.clearListeners(map, 'bounds_changed');

Tarık Özgün Güner
fuente