Это потому, что у вас, вероятно, есть замыкание в цикле!Таким образом, переменная i
в обратном вызове уже перезаписывается в момент вызова обратного вызова.У вас есть два варианта, как это исправить:
1) классический обходной путь "замыкания в цикле" (вы делаете другое закрытие для каждой итерации цикла):
for (i = 0; i < 20; i++) { (function (i) {
google.maps.event.addListener(point[i], 'click', function() {
infowindow[i] = new google.maps.InfoWindow({content: contentString[i] });
infowindow[i].open(map,point[i]);
});
})(i);
}
2) избегайте замыкания и используйтеструктура данных маркера:
for (i = 0; i < 20; i++) {
point[i].i = i;
google.maps.event.addListener(point[i], 'click', function() {
this.myinfowindow = new google.maps.InfoWindow({content: contentString[this.i] });
this.myinfowindow.open(map, this);
});
}
(или вы также можете переместить contentString также к маркеру: point[i].contentString = ...
и использовать this.contentString
в обработчике кликов. Тогда вам не нужен point[i].i
атрибут.)
Лично я гораздо больше предпочитаю второе решение, чем первое, поскольку замыкания потребляют память и т. д.