Есть ли способ определить, какой маркер карты Google был нажат?

StackOverflow https://stackoverflow.com/questions/859099

Вопрос

Следующий код перебирает объект 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».Я застрял, пытаясь найти способ идентифицировать маркер, по которому щелкнули, чтобы каким-то образом получить нужную информацию из объекта данных.

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

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

Это было полезно?

Решение

А событие щелчка для карты передает три разных элемента.

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

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

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

Другие советы

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

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

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

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

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

    GEvent.addListener(marker, "click", function(o){
            alert(o);
    });
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top