Pregunta

Los bucles de código follwoing sobre un objeto JSON para colocar el marcador en un mapa de Google. Que funciona muy 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]);
        });
    }
}

El problema es que cada marcador responde siempre con el último valor de "i". Estoy atascado tratando de encontrar una manera de identificar el marcador que se ha hecho clic para obtener de alguna manera la información correcta del objeto de datos.

Estoy pensando en la creación de una serie de marcadores en la creación de bucle a través basado en la ubicación marcadores, pero que se siente muy ineficiente para mí.

Cualquier ayuda, como siempre, muy apreciada.

¿Fue útil?

Solución

El rel="nofollow href="http://code.google.com/apis/maps/documentation/reference.html#GMap2.click" evento click para ver el mapa pasa tres elementos diferentes.

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

Si el usuario no haga clic en una superposición, 'superposición' y 'overlaylatlng' será nulo.

Actualización: Hay que añadir que el oyente el mapa (no el marcador) si desea obtener una GOverlay fuera de él. Los href="http://code.google.com/apis/maps/documentation/reference.html#GMarker.click" haga clic en evento para un GMarker sólo devuelve el GLatLng .

Otros consejos

El Mapa soporta un evento Ontap, que pasa el índice del marcador que fue seleccionado, por favor referirse a este ejemplo:

Parece que las soluciones anteriores sólo devuelven las coordenadas del marcador, que no resuelve mi problema. Tal vez estoy haciendo algo mal.

Sin embargo, la forma en que resolvió que era simplemente añadir un alojamiento a la marca como esto

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

ACTUALIZACIÓN: Los aboves resuelve de una manera, pero la forma más fácil es para unir el evento para el mapa como se ha mencionado en los comentarios

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

simple como el pastel.

    GEvent.addListener(marker, "click", function(o){
            alert(o);
    });
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top