C'è un modo per identificare quali Google Map Marker è stato cliccato?
-
21-08-2019 - |
Domanda
Il codice follwoing loop su un oggetto JSON per posizionare indicatore su una mappa di Google. Che funziona bene.
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]);
});
}
}
Il problema è che ogni marcatore risponde sempre con l'ultimo valore di "i". Sono bloccato cercando di capire un modo per identificare il marcatore che è stato cliccato per ottenere in qualche modo le giuste informazioni dall'oggetto dati.
Sto pensando di creare una serie di marcatori al momento della creazione per scorrere in base alla posizione marcatori, ma che si sente davvero inefficiente per me.
Qualsiasi aiuto, come sempre, molto apprezzato.
Soluzione
Il cliccare evento per la mappa passa tre elementi diversi.
GEvent.addListener(map, "click", function(overlay, latlng, overlaylatlng) {
// overlay = GOverlay or null
// latlng = GLatLng
// overlaylatlng = GLatLng or null
});
Se l'utente non ha fatto clic su un overlay, 'overlay' e 'overlaylatlng' sarà nullo.
Aggiornamento: È necessario aggiungere l'ascoltatore alla mappa (non il marcatore) se si vuole ottenere un GOverlay fuori di esso. I href="http://code.google.com/apis/maps/documentation/reference.html#GMarker.click" clicca evento per un GMarker restituisce solo il GLatLng .
Altri suggerimenti
La mappa supporta un evento onTap, che passa l'indice del marcatore che è stato scelto, si prega di fare riferimento a questo esempio:
Sembra che le soluzioni di cui sopra restituiscono solo le coordinate del marcatore, che non risolve il mio problema. Forse sto facendo qualcosa di sbagliato.
Tuttavia, il modo in cui ho risolto era semplicemente aggiungere un alloggio ai marcatore come questo
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: I aboves risolve in un modo, ma il modo più semplice è quello di collegare l'evento per la mappa, come indicato nei commenti
GEvent.addListener(map, "click", function(marker, point){
alert(marker);
});
semplice come torta.
GEvent.addListener(marker, "click", function(o){
alert(o);
});