Frage

Die follwoing Code-Loops ein JSON-Objekt über Marker zu platzieren auf einer Google-Karte. Welche funktioniert.

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, reagiert jeder Marker immer mit dem letzten Wert von „i“. Ich bin fest versuchen, einen Weg, um herauszufinden, den Marker zu identifizieren, die irgendwie geklickt wurden, um die richtigen Informationen aus dem Datenobjekt zu erhalten.

Ich denke über eine Reihe von Markern bei der Erstellung einer Schleife erzeugt wird, durch basierend auf der Marker Lage, aber das fühlt sich wirklich ineffizient zu mir.

Jede Hilfe, wie immer, sehr geschätzt.

War es hilfreich?

Lösung

Die Ereignis für die Karte klicken geht drei verschiedene Elemente.

GEvent.addListener(map, "click", function(overlay, latlng, overlaylatlng) {
  // overlay = GOverlay or null
  // latlng = GLatLng
  // overlaylatlng = GLatLng or null
});

Wenn der Benutzer nicht auf ein Overlay klicken hat, 'Overlay' und 'overlaylatlng' null sein wird.

Update: Sie haben den Hörer auf die Karte hinzuzufügen (nicht der Marker), wenn Sie einen GOverlay aus ihn heraus zu bekommen. Die klicken gibt nur die GLatLng .

Andere Tipps

Die Karte unterstützt eine onTap Veranstaltung, die den Index der Markierung passiert, die ausgewählt wurde, finden Sie in dieses Beispiel:

Es scheint, dass die oben genannten Lösungen nur die Koordinaten der Markierung zurückkehren, das nicht mein Problem löst. Vielleicht mache ich etwas falsch.

Allerdings löste das so, wie ich es war, wie dies eine Eigenschaft an den Marker einfach hinzufügen

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: Die aboves löst es eine Möglichkeit, aber der einfachere Weg ist das Ereignis an die Karte zu befestigen, wie in den Kommentaren erwähnt

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

Einfach als Torte.

    GEvent.addListener(marker, "click", function(o){
            alert(o);
    });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top