Google Maps API v3: Wie entferne ich einen Ereignis-Listener?

91

Wie entferne ich den Ereignis-Listener "bounds_changed" in Google Maps API v3 ?

google.maps.event.removeListener(_???_);    
mp_
quelle
1
Ich glaube, ich habe gefunden, wonach Sie gesucht haben. Es war die 3. Ereignisfunktion in API-Dokumenten.
Maiku Mori
1
Ich fühle deinen Schmerz. Sie würden denken, diese Dokumentation wäre auf code.google.com/apis/maps/documentation/javascript/events.html, aber es ist nicht. Grrrr
Drew LeSueur

Antworten:

152

Normalerweise finden Sie Antworten auf solche Fragen in der Dokumentation zur Google Maps-API.

Wie Andrew sagte, gibt addListener ein Handle zurück, mit dem Sie den Listener später entfernen können. Dies liegt daran, dass ein einzelnes Ereignis viele Listener haben kann. Um diese zu entfernen, müssen Sie einen Verweis auf jeden angehängten Listener speichern.

Es gibt auch eine Funktion, mit der alle Listener gleichzeitig entfernt werden:

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

Hier ist die Google Maps API-Referenz, in der Sie darüber lesen können.

Maiku Mori
quelle
2
Wird dadurch NUR das Ereignis bounds_changed entfernt?
mp_
Was ist das Für und Wider dieser Methode gegenüber der Andrews-Methode?
mp_
Dadurch werden alle Listener aus dem Ereignis bounds_changed entfernt. Während Andrews Methode eine entfernt. Wenn Sie das Handle nicht irgendwo speichern möchten und sich nur um 1 Listener für ein bestimmtes Ereignis kümmern müssen, ist dies der richtige Weg.
Maiku Mori
Wie gesagt, Ereignisse können viele Listener haben, aber es scheint, als würden Sie nur 1 in Ihrem Code verwenden. Wenn Sie dieses Konzept verstehen, werden Sie die unterschiedlichen Verwendungsmöglichkeiten für beide Funktionen sehen. Siehe auch den Link, den ich bereitgestellt habe. Er enthält nette Erklärungen für diese beiden Funktionen.
Maiku Mori
2
Herausgefunden. google.maps.event.clearListeners(map, 'idle')funktioniert. Aber map.clearListeners('idle')nicht. Diese Syntax funktioniert für alles andere in der API ( .addListenerusw.). Seltsam.
Andy Mercer
93

addListener gibt ein Handle zurück, das Sie später an removeListener übergeben können:

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

google.maps.event.removeListener(listenerHandle);
Andrew
quelle
Es gibt also keine statischen Variablen mehr für die Listener?
mp_
Zuhörer müssen einzeln entfernt werden. Sie können sie nicht alle ala jQuery lösen. Ich weiß es, weil ich das Gleiche dachte und auch in diesem Punkt verwirrt war. Ich habe es schließlich herausgefunden und der Pseudocode oben zeigt grob, wie ich es gemacht habe.
Andrew
1
Drat! Ihre ist eine bessere Antwort.
Andrew
4
Bessere Antwort für mich, das entfernt nur den von uns erstellten Ereignis-Listener und hat keinen Einfluss auf die anderen Skripte
Matthieu Napoli
2
Bessere Antwort aus zwei Gründen. Nur entfernt den tatsächlichen Listener. Hat auch nicht das snarky "Sie können es im Kommentar der API-Dokumente finden.
keithhackbarth
16

Dies scheint in der aktuellen Version zu funktionieren.

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {
    // Handler code.
});
listenerHandle.remove();
ether6
quelle
Und das Schöne an diesem Ansatz ist, dass er auch listenerHandler.remove()für Listener auf Datenebene funktioniert - dh, google.maps.data.addListenerda KEINE google.maps.data.removeListenerMethode definiert ist.
Christopher King
0

Wenn Sie das Listener-Objekt nicht irgendwie halten könnten, könnten Sie Listener direkt als entfernen google.maps.event.clearListeners(objectListened, 'event');

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

Tarık Özgün Güner
quelle