我试图将一个变量放入一个循环内运行的 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 的最后一项,这是有道理的,但我不知道如何纠正这个问题。
Rocket 回答了这个问题并且是正确的,但是语法略有偏差,所以在这里发布真正的语法是为了以后遇到这个问题的任何人:
google.maps.event.addListener(gmarkers[i], 'click', (function(i) {
return function() {
alert(i);
bubbles[i].open(map, gmarkers[i]);
}})
(i));