Предупреждает ли вас, что значение всегда 181? Вам нужно заключить объявление обработчика в замыкание, чтобы остановить его, используя внешнее значение i
(которое всегда будет 181 после завершения цикла)
(function(i){
google.maps.event.addListener(markers[i], 'click', function() {
alert('number of infowindows: ' + infowindows.length + ' and value is: ' + i);
infowindows[i].open(map,markers[i]);
});
}(i));
Edit: поскольку вы используете функцию $ .each jQuery, которая дает каждой итерации свою собственную область (поскольку каждая итерация вызывает функцию), вы также можете обойти свою проблему, создав локальную переменную, скажем j, которая захватывает внешнее значение i.
var j = i;
google.maps.event.addListener(markers[i], 'click', function() {
alert('number of infowindows: ' + infowindows.length + ' and value is: ' + j);
infowindows[j].open(map,markers[j]);
});
(Это работает, потому что на каждой итерации создается новый j
, тогда как раньше у вас было только 1 i
, потому что вы объявили его вне функции итерации.)