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


91

¿Cómo elimino el detector de eventos 'limits_changed' en la API de Google Maps v3 ?

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

1
Creo que encontré lo que buscabas. Fue la tercera función de evento en documentos API.
Maiku Mori

1
Siento tu dolor. Pensarías que esta documentación estaría en code.google.com/apis/maps/documentation/javascript/events.html pero no lo está. Grrrr
Drew LeSueur

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.


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);

¿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();

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');

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.