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(_???_);    

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.


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

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.