Pergunta

O código follwoing loop sobre um objeto JSON para o lugar de marcador em um mapa do Google. Que bem funciona.

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

O problema é, cada marcador de sempre responde com o último valor de "i". Eu estou preso tentando descobrir uma maneira de identificar o marcador que foi clicado, de alguma forma obter as informações corretas do objeto de dados.

Eu estou pensando sobre a criação de um conjunto de marcadores na criação de percorrer com base na localização marcadores, mas que se sente realmente ineficiente para mim.

Qualquer ajuda, como sempre, muito apreciada.

Foi útil?

Solução

O evento clique para ver o mapa passes três elementos diferentes.

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

Se o usuário não clicar em uma sobreposição, 'overlay' e 'overlaylatlng' será nula.

Update: Você tem que adicionar o ouvinte ao mapa (não o marcador) se você deseja obter um GOverlay fora dele. A clique evento para um GMarker só retorna a GLatLng .

Outras dicas

O Mapa suporta um evento ONTAP, que passa o índice do marcador que foi selecionado, consulte neste exemplo :

Parece que as soluções acima retornar apenas as coordenadas do marcador, que não resolve o meu problema. Talvez eu estou fazendo algo errado.

No entanto, a maneira como eu resolvi que era simplesmente adicionar uma propriedade para o marcador como este

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: Os aboves resolve-lo de uma maneira, mas a maneira mais fácil é para anexar o evento para o mapa, como mencionado nos comentários

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

Simples como a torta.

    GEvent.addListener(marker, "click", function(o){
            alert(o);
    });
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top