API di Google Maps v3: come rimuovere un listener di eventi?


91

Come faccio a rimuovere il listener di eventi "bounds_changed" nell'API di Google Maps v3 ?

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

1
Penso di aver trovato quello che stavi cercando. Era la terza funzione evento nei documenti API.
Maiku Mori

1
Condivido il tuo dolore. Penseresti che questa documentazione sarebbe su code.google.com/apis/maps/documentation/javascript/events.html ma non lo è. Grrrr
Drew LeSueur

Risposte:


152

Di solito puoi trovare le risposte a queste domande nella documentazione dell'API di Google Maps.

Come ha detto Andrew, addListener restituisce un handle che puoi utilizzare in seguito per rimuovere il listener. Questo perché un singolo evento può avere molti listener e per rimuoverli è necessario salvare un riferimento a ciascuno dei listener allegati.

C'è anche una funzione che rimuove tutti gli ascoltatori contemporaneamente:

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

Ecco il riferimento all'API di Google Maps dove puoi leggere a riguardo.


2
Quindi questo rimuoverà SOLO l'evento bounds_changed?
mp_

Qual è il pro / contro dell'utilizzo di questo metodo rispetto al metodo Andrews?
mp_

Questo rimuove tutti i listener dall'evento bounds_changed. Mentre il metodo di Andrew ne rimuove uno. Se non vuoi memorizzare l'handle da qualche parte e devi preoccuparti solo di 1 ascoltatore per un determinato evento, questa è la strada da percorrere.
Maiku Mori,

Come ho detto, gli eventi possono avere molti ascoltatori, ma sembra che tu stia usando solo 1 nel tuo codice. Se capirai questo concetto vedrai i diversi usi per entrambe le funzioni. Vedi anche il link che ho fornito, ha belle spiegazioni per entrambe le funzioni.
Maiku Mori,

2
Capito. google.maps.event.clearListeners(map, 'idle')lavori. Ma map.clearListeners('idle')non lo fa. Questa sintassi funziona per tutto il resto nell'API ( .addListener, ecc.). Dispari.
Andy Mercer

93

addListener restituisce un handle che puoi successivamente passare a removeListener:

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

google.maps.event.removeListener(listenerHandle);

Quindi non ci sono più variabili statiche per gli ascoltatori?
mp_

Gli ascoltatori devono essere rimossi uno per uno. Non puoi svincolarli tutti ala jQuery. Lo so perché ho pensato la stessa cosa e mi sono confuso anche su questo punto. Alla fine l'ho risolto e lo pseudo-codice sopra illustra approssimativamente come l'ho fatto.
Andrew

1
Drat! La tua è una risposta migliore.
Andrew

4
Risposta migliore per me, è rimuovere solo l'ascoltatore di eventi che abbiamo creato e non influisce sugli altri script
Matthieu Napoli

2
Risposta migliore per due motivi. Solo, rimuove l'ascoltatore effettivo. Inoltre, non ha lo snarky "Puoi trovarlo nel commento dei documenti API.
keithhackbarth,

16

Questo sembra funzionare nella versione corrente.

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

E la cosa bella di questo approccio è che listenerHandler.remove()funziona anche per i listener del livello dati, cioè google.maps.data.addListener, poiché NON è google.maps.data.removeListenerdefinito alcun metodo.
Christopher King


0

Se non puoi tenere in qualche modo l'oggetto listener, puoi rimuovere gli ascoltatori direttamente come file google.maps.event.clearListeners(objectListened, 'event');

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.