Есть ли способ определить, какой маркер карты Google был нажат - PullRequest
5 голосов
/ 13 мая 2009

Следующий код зацикливается на объекте json для размещения маркера на карте Google. Который работает отлично.

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

Проблема в том, что каждый маркер всегда отвечает последним значением «i». Я застрял, пытаясь найти способ идентифицировать маркер, по которому щелкнули, чтобы каким-то образом получить правильную информацию из объекта данных.

Я подумываю о создании массива маркеров для создания цикла, основанного на расположении маркеров, но это кажется мне действительно неэффективным.

Любая помощь, как всегда, очень ценится.

Ответы [ 4 ]

5 голосов
/ 13 мая 2009

Событие click для карты проходит три разных элемента.

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

Если пользователь не нажал на оверлей, «overlay» и «overlaylatlng» будут нулевыми.

Обновление: Вы должны добавить слушателя на карту (не маркер), если вы хотите получить GOverlay из нее. Событие клика для GMarker возвращает только GLatLng.

1 голос
/ 21 декабря 2009

Карта поддерживает событие onTap, которое передает индекс выбранного маркера, см. этот пример:

0 голосов
/ 15 мая 2009

Кажется, что приведенные выше решения возвращают только координаты маркера, что не решает мою проблему. Возможно, я делаю что-то не так.

Однако, как я решил это, просто добавил свойство к маркеру вот так

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

ОБНОВЛЕНИЕ: описанное выше решает это одним способом, но более простой способ - прикрепить событие к карте, как указано в комментариях GEvent.addListener(map, "click", function(marker, point){ alert(marker); });

0 голосов
/ 13 мая 2009

просто как пирог.

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