Похоже, вы попали в классическую ошибку loop-plus-closure, которая в упрощенном виде выглядит следующим образом:
while(i<=(a_l-1)) {
// snip
var marker = new google.maps.Marker({
// snip
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
// snip
}
Проблема в том, что из-за способа работы замыканий в Javascriptфункция-обработчик будет сохранять постоянную ссылку на переменную marker
даже после того, как она назначена новому объекту.Конечный результат: все ваши обработчики ссылаются на последний объект, назначенный marker
.
. Есть несколько способов исправить это;Я обычно использую отдельную функцию для назначения обработчика щелчка, который фиксирует правильный marker
объект в области действия обработчика:
function addClickHandler(marker) {
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
}
while(i<=(a_l-1)) {
var marker = new google.maps.Marker({
// snip
});
addClickHandler(marker);
}