2009-10-09 7 views
81

Wie entferne ich den Event-Listener 'bounds_changed' in ?Google Maps API v3: So entfernen Sie einen Ereignis-Listener?

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

Ich glaube, ich gefunden, was Sie gesucht haben. Es war die dritte Ereignisfunktion in API-Dokumenten. –

+1

Ich fühle deinen Schmerz. Sie würden denken, dass diese Dokumentation unter http://code.google.com/apis/maps/documentation/javascript/events.html zu finden ist, aber nicht. Grrrr –

Antwort

135

Normalerweise können Sie Antworten auf diese Fragen in Google Maps API-Dokumentation.

Wie Andrew sagte, gibt addListener einen Griff, der Sie später den Hörer entfernen können. Das liegt daran, dass ein einzelnes Ereignis viele Listener enthalten kann. Um sie zu entfernen, müssen Sie einen Verweis auf jeden der angehängten Listener speichern.

Es gibt auch eine Funktion, die alle die Zuhörer zugleich entfernt:

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

Here's the Google Maps API reference wo man darüber lesen kann.

+2

dies wird also nur das bounds_changed Ereignis entfernen? –

+0

Was ist die Pro/con diese Methode vs Andrews Verfahren zur Verwendung? –

+0

Dadurch werden alle Zuhörer aus Das bounds_changed-Ereignis, während die Methode von Andrew eines entfernt. Wenn Sie das Handle nicht irgendwo speichern wollen und sich nur um einen Listener für ein gegebenes Ereignis kümmern müssen, dann ist das der richtige Weg. –

83

addListener gibt einen Handle, die Sie später removeListener passieren kann:

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

google.maps.event.removeListener(listenerHandle); 
+0

Also gibt es keine statischen Variablen für die Listener? –

+0

Listener müssen einzeln entfernt werden. Sie können sie nicht alle ala jQuery lösen. Ich weiß, weil ich dasselbe dachte und auch in diesem Punkt verwirrt war. Ich habe es schließlich ausgearbeitet und der Pseudo-Code oben zeigt grob, wie ich es gemacht habe. – Andrew

+0

Schauen Sie auf meine Antwort, ich denke, es ist eine bessere Lösung. –

11

Dies scheint in der aktuellen Version zu funktionieren.

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

Und das Schöne an diesem Ansatz ist, dass 'listenerHandler.remove()' auch für Data-Layer-Listener funktioniert - also 'google.maps.data.addListener' - da keine Methode 'google.maps.data.removeListener' definiert ist. –

+0

Yeap .... https://developers.google.com/maps/documentation/javascript/events#removing –

0

Wenn Sie könnte nicht irgendwie das Listener-Objekt halten Sie Hörer abnehmen konnte (n) direkt als google.maps.event.clearListeners(objectListened, 'event');

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