2009-05-13 2 views
4

Der folgende Code führt eine Schleife über ein Json-Objekt, um eine Markierung auf einer Google-Karte zu platzieren. Was gut funktioniert.Gibt es eine Möglichkeit zu identifizieren, auf welchen Google Map Marker geklickt wurde?

function displayMarkers(data){ 
    for(var i = 0; i < data.Lat.length; i++){ 
     var point = new GLatLng(data.Lat[i],data.Lng[i]); 
     marker = new GMarker(point); 
     map.addOverlay(marker); 

      // here's the problem 
     GEvent.addListener(marker, "click", function(){ 
      alert(data.Name[i]); 
     }); 
    } 
} 

Das Problem ist, jeder Marker antwortet immer mit dem letzten Wert von "i". Ich hänge daran, einen Weg zu finden, den Marker zu identifizieren, auf den geklickt wurde, um irgendwie die richtigen Informationen aus dem Datenobjekt zu bekommen.

Ich denke darüber nach, ein Array von Markern bei der Erstellung zu erstellen, um basierend auf dem Marker-Ort zu durchlaufen, aber das fühlt sich für mich wirklich ineffizient an.

Jede Hilfe, wie immer, sehr geschätzt.

Antwort

4

Die click event for the map besteht aus drei verschiedenen Elementen.

Wenn der Benutzer nicht auf ein Overlay geklickt hat, wird 'overlay' und 'overlayatlngng' null sein.

Aktualisierung: Sie müssen den Listener zur Karte hinzufügen (nicht die Markierung), wenn Sie ein GOverlay daraus machen wollen. Die click event for a GMarker gibt nur die GLatLng zurück.

-2

Einfach wie Kuchen.

GEvent.addListener(marker, "click", function(o){ 
      alert(o); 
    }); 
0

Es scheint, dass die obigen Lösungen nur die Koordinaten des Markers zurückgeben, was mein Problem nicht löst. Vielleicht mache ich etwas falsch.

jedoch die Art und Weise gelöst ich es war wie dieses

function createMarker(latlng,name) { 
     var marker = new GMarker(latlng); 

     // HERE WE GO 
     marker.value = name; 

     GEvent.addListener(marker,"click", function() { 
     addToList(this.value); 
     }); 
     return marker; 
} 

UPDATE eine Eigenschaft an den Marker einfach hinzufügen: Die aboves einer anderen löst, aber der einfachere Weg ist zu befestigen das Ereignis der Karte wie in den Kommentaren erwähnt

GEvent.addListener(map, "click", function(marker, point){ 
    alert(marker); 
}); 
+0

Ah, Sie haben völlig Recht. Das Problem besteht darin, dass wir den Listener zum Marker und nicht zur Karte hinzufügen. Wenn Sie den Listener zur Karte hinzufügen, funktioniert er wie erwartet - und Sie müssen den Listener nur einmal hinzufügen. –

+0

Cool, danke dafür. – gargantuan

1

die Karte unterstützt eine onTap Veranstaltung, die den Index der Marke geht r was ausgewählt wurde, siehe this Beispiel: