可能重複:
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