我正在做一个循环,每次迭代我都会设置一个名为content的字符串var,这个var我用来创建一些google地图标记的infoWindows。但是在每次更改var的值而不是创建新实例的迭代中,这会修改值并始终使用var content
的最后一个值来设置标记的infoWindows,这就是为什么我做错了。 / p>
for (var i = 0; i < info.length; i++) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(info[i].split(',')[5],
info[i].split(',')[6]),
optimized: false,
map: map,
zoom: 6,
draggable: true,
animation: google.maps.Animation.DROP
});
var content = '<p>Central: ' + info[i].split(',')[1] + '</p>';
var infoWindow = new google.maps.InfoWindow({
content: content
});
google.maps.event.addListener(marker, 'click', function () {
infoWindow.open(map, this);
currentMarker = this;
});
}
答案 0 :(得分:3)
google.maps.event.addListener(marker, 'click', function () {
infoWindow.open(map, this);
currentMarker = this;
});
创建一个闭包和infoWindow
指向外部函数变量,以便所有处理程序打开相同的infoWindow
。 javascript中只有函数范围(没有人为每个for,if等)。使用闭包来达到你想要的效果:
google.maps.event.addListener(marker, 'click', (function(infoW){
return function () {
infoW.open(map, this);
currentMarker = this;
};
})(infoWindow));
答案 1 :(得分:0)
这确实很奇怪。
您是否尝试将内容构建为内联?
var infoWindow = new google.maps.InfoWindow({
content: '<p>Central: ' + info[i].split(',')[1] + '</p>'
});