可能重复:
Google Maps - Multiple markers - 1 InfoWindow problem信息泡沫总是显示了在最后一个标记
我正在做一个map,我绘制一些城镇和地区。你会看到,当你点击一个标记时,你会被重定向到相应的页面。但现在我想将链接和其他信息放入信息泡泡弹出窗口中。所以,我编辑我的代码如下:
function setMarkers(map, locations) {
for (var i = 0; i < locations.length; i++) {
var beach = locations[i];
var myLatLng = new google.maps.LatLng(beach[1], beach[2]);
var infobulle = new google.maps.InfoWindow({content: beach[4], position: myLatLng});
var marker = new google.maps.Marker({position: myLatLng, map: map, title: beach[0], zIndex: beach[3], clickable: true, icon: beach[5],});
marker[i] = marker;
google.maps.event.addListener(marker[i], 'click', function() {
infobulle.open(map, marker);
});
}
}
但你可以see here的信息泡沫停留在最后一个位置“封杀”。我真的不知道如何排序。
我有这个相同的结果:
function setMarkers(map, locations) {
for (var i = 0; i < locations.length; i++) {
var beach = locations[i];
var myLatLng = new google.maps.LatLng(beach[1], beach[2]);
var infobulle = new google.maps.InfoWindow({content: beach[4]});
var marker = new google.maps.Marker({position: myLatLng, map: map, title: beach[0], zIndex: beach[3], clickable: true, icon: beach[5]});
google.maps.event.addListener(marker, 'click', function() {
infobulle.open(map, marker);
});
}
最新版本:
function setMarkers(map, locations) {
for (var i = 0; i < locations.length; i++) {
processBeach(locations[i]);
}
}
function processBeach(beach) {
var myLatLng = new google.maps.LatLng(beach[1], beach[2]);
var infobulle = new google.maps.InfoWindow({content: beach[4]});
var marker = new google.maps.Marker({position: myLatLng, map: map, title: beach[0], zIndex: beach[3], clickable: true, icon: beach[5]});
google.maps.event.addListener(marker, 'click', function() {
infobulle.open(map, marker);
});
}
哼,我真的不明白你在沙滩上做了什么。 –
是的,封闭需要一点时间来解决你的问题。我正在做的是一次性定义和调用一个函数。所以我定义了一个匿名函数,它接受一个名为'beach'的参数,然后调用它,传递'locations [i]'的值作为参数。因此,在闭包中,'beach'具有从'locations [i]'传入的值,用于当前迭代的'i'值。正如代码中所发生的那样,泄漏值没有问题,因为'beach'只存在于闭包内部,对于'for'循环的每次迭代来说,重要的是一个_different变量_。 – leftclickben
我刚更新了答案,以包含没有关闭的版本。 – leftclickben