2009-05-13 3 views
4

Следующий код перебирает объект json для размещения маркера на карте google. Что хорошо работает.Есть ли способ определить, какой маркер карты 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

click event for the map проходит три различных элемента.

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

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

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

-2

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

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

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

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

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

ОБНОВЛЕНИЕ: aboves решает это один из способов, но более легкий путь состоит в закреплении событие на карте, как указано в комментариях

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

Ах, вы совершенно правы. Проблема в том, что мы добавляем слушателя к маркеру, а не к карте. Если вы добавите слушателя на карту, он будет работать так, как ожидалось, - и вам нужно только добавить слушателя один раз. –

+0

Прохладный, спасибо за это. – gargantuan

1

Карта поддерживает событие OnTap, который проходит индекс Marke r, который был выбран, см. пример this:

 Смежные вопросы

  • Нет связанных вопросов^_^