ループ内で実行される addListener 関数に変数を取得しようとしていますが、常にループ変数の最後のインスタンスにのみ注目します。
例えば
for(var i=0; i < data.length; i++) {
points[i] = new google.maps.LatLng(parseFloat(data[i].lat), parseFloat(data[i].lng));
gmarkers[i] = new google.maps.Marker({
map: map,
position: points[i],
title: locationdata[i].title
});
gmarkers[i].setMap(map);
bubbles[i] = new google.maps.InfoWindow({
content: locationdata[i].summary
});
google.maps.event.addListener(gmarkers[i], 'click', function() {
alert(i);
bubbles[i].open(map, gmarkers[i]);
});
}
したがって、問題は、alert(i) が常に data.length の最後の項目であることです。これは理にかなっていますが、これを修正する方法がわかりません。
ロケットはこの質問に答えて正解でしたが、構文が少しずれていたので、後でこれに出くわした人のために実際の構文をここに投稿します。
google.maps.event.addListener(gmarkers[i], 'click', (function(i) {
return function() {
alert(i);
bubbles[i].open(map, gmarkers[i]);
}})
(i));