Проблема в том, что переменная 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, но этот способ кажется более читабельным.