我有一個谷歌地圖標記事件偵聽器的怪異問題。基本上我想在一個循環中聲明一堆標記,並讓每個標記都有一個關聯的infowindow。相關的代碼是:在循環中聲明谷歌地圖標記
var markers=[];
var contents = [];
var infowindows = [];
for (i = 0; i < 10; i++) {
markers[i] = new google.maps.Marker({
position: new google.maps.LatLng(40+Math.random()*5, 4+Math.random()*5),
map: map,
title: 'samplemarker'
});
contents[i] = '<div class="popup_container">' +
'</div>';
infowindows[i] = new google.maps.InfoWindow({
content: contents[i],
maxWidth: 300
});
google.maps.event.addListener(markers[i], 'click', function() {
infowindows[i].open(map,markers[i]);
map.panTo(markers[i].getPosition());
});
}
的標記正確創建,以及信息窗口太多,因爲如果我這樣做手工infowindows[i].open(map,markers[i]);
它們正確地打開。然而,聽衆不起作用。
Even weirder:我還有另外一個標記,marker_1在for循環之外聲明,完全一樣。如果我寫:
google.maps.event.addListener(marker_1, 'click', function() {
infowindows[0].open(map,markers[0]);
map.panTo(markers[0].getPosition());
});
當單擊marker_1時,infowindow 0被打開並且地圖將被移動到標記0。但是,在寫入時,在完全相同的位置上,除marker_1替換爲marker_ [0]以外的其他行,標記0上的單擊完全沒有效果。
感謝您的任何幫助和抱歉,如果它是愚蠢的!
內'i'沒有你認爲它的偵聽器函數內的值。看看這篇文章https://developers.google.com/maps/documentation/javascript/examples/event-closure – slash197
我試着將它改爲另一個變量名,無濟於事。此外,即使這是問題,它也不能解釋爲什麼代碼段google.maps.event.addListener(markers [0],'click',function(){infowindows [0] .open(map,markers [ 0]); map.panTo(markers [0] .getPosition()); });在for循環之外調用時不起作用。 – ProgressiveMonkey