Есть ли способ определить, какой маркер карты Google был нажат?
-
21-08-2019 - |
Вопрос
Следующий код перебирает объект 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);
});