Question

Le code follwoing boucle sur un objet JSON pour placer le marqueur sur une carte Google. Ce qui fonctionne très bien.

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

Le problème est, chaque marqueur répond toujours avec la dernière valeur de « i ». Je suis coincé à essayer de trouver un moyen d'identifier le marqueur qui a été cliqué pour obtenir en quelque sorte la bonne information de l'objet de données.

Je pense à la création d'un éventail de marqueurs à la création en boucle par fonction de l'emplacement des marqueurs, mais qui se sent vraiment inefficace pour moi.

Toute aide, comme toujours, très apprécié.

Était-ce utile?

La solution

Le cliquez événement pour la carte passe trois éléments différents.

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

Si l'utilisateur n'a pas cliqué sur une superposition, « superposition » et « overlaylatlng » sera nulle.

Mise à jour: Vous devez ajouter l'auditeur à la carte (pas le marqueur) si vous voulez obtenir un GOverlay sortir. Les cliquez sur événement pour un GMarker ne retourne que le GLatLng .

Autres conseils

La carte prend en charge un événement onTap, qui passe l'index du marqueur qui a été sélectionné, s'il vous plaît se référer à ce exemple:

Il semble que les solutions ci-dessus ne renvoient que les coordonnées du marqueur, qui ne résout pas mon problème. Peut-être que je fais quelque chose de mal.

Cependant, la façon dont je l'ai résolu était simplement d'ajouter une propriété au marqueur comme celui-ci

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

Mise à jour: Les aboves résout d'une façon, mais le plus simple est de joindre l'événement à la carte comme mentionné dans les commentaires

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

Simple comme bonjour.

    GEvent.addListener(marker, "click", function(o){
            alert(o);
    });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top