Est-il possible d'identifier les marqueurs Google Map a été cliqué?
-
21-08-2019 - |
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é.
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);
});