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.

È stato utile?

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);
    });
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top