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.