Google map API2 addListener - PullRequest
       8

Google map API2 addListener

0 голосов
/ 06 июля 2011

У меня есть все маркеры в массиве makers, и когда я нажимаю на маркер, я хочу получить индекс из массива.однако это не возвращает меня с правильным индексом, а возвращает максимальный индекс.Любое предложение?

for(var i = 0; i<options.length; i++){
marker[i] = new GMarker(new GLatLng(options[i].latitude, options[i].longitude), markerIcon);
//addListener(i, options[i].name);
GEvent.addListener(marker[i],"click", function(e) {
alert(i);
});
map.addOverlay(marker[i]);
}

1 Ответ

1 голос
/ 21 февраля 2012

Проблема в том, что переменная i не захватывается в замыкании, как вы ожидаете. Итак, все слушатели записывают один и тот же i (который в конечном итоге увеличивается до options.length). Вам нужно обернуть создание маркера / слушателя в его собственную функцию.

var makeNewMarker = function(i) {
  var marker = new GMarker(
      new GLatLng(options[i].latitude, options[i].longitude),
      markerIcon);
  GEvent.addListener(marker[i],"click", function(e) {
    alert(i);
  });
};
for (var i = 0; i < options.length; ++i) {
  marker[i] = makeNewMarker(i);
  map.addOverlay(marker[i]);
}

Вы можете сделать функцию makeNewMarker анонимной функцией внутри цикла for, но этот способ кажется более читабельным.

...