我有幾個谷歌地圖標記,我試圖給每個添加一個點擊事件,但由於某種原因,顯示的文本對每個標記都是一樣的:(使用谷歌地圖的JavaScript中的範圍和關閉問題
我認爲這是一個問題,我的JS閉包(都是閉包同樣的事情,在JS範圍是什麼?)
與那裏的問題是發生標記的地圖是在這裏: http://www.comehike.com/outdoors/parks/trailhead.php
我是什麼在我所擁有的代碼中做錯了,這會讓每個標記出現相同的彈出窗口?
個謝謝, 亞歷克斯
我有幾個谷歌地圖標記,我試圖給每個添加一個點擊事件,但由於某種原因,顯示的文本對每個標記都是一樣的:(使用谷歌地圖的JavaScript中的範圍和關閉問題
我認爲這是一個問題,我的JS閉包(都是閉包同樣的事情,在JS範圍是什麼?)
與那裏的問題是發生標記的地圖是在這裏: http://www.comehike.com/outdoors/parks/trailhead.php
我是什麼在我所擁有的代碼中做錯了,這會讓每個標記出現相同的彈出窗口?
個謝謝, 亞歷克斯
這裏是一個JSFiddle Demo:
我創建了附加信息命名標誌的虛擬陣列。然後,我們創建一個全局變量infowindow來保存信息窗口的一個實例。此信息窗口將在點擊標記旁邊彈出。
var map;
var global_markers = [];
var markers = [[37.09024, -95.712891, 'trialhead0'], [-14.235004, -51.92528, 'trialhead1'], [-38.416097, -63.616672, 'trialhead2']];
var infowindow = new google.maps.InfoWindow({});
在您的標記填充for循環。基本上,我不是用每個標記持有一個infowindow的實例,而是使用它附加內容,並在單擊標記時使用onclick事件,我將infowindow的內容與我們保存的內容一起設置,然後打開點擊旁邊的infowindow標記:
for (var i = 0; i < markers.length; i++) {
// obtain the attribues of each marker
var lat = parseFloat(markers[i][0]);
var lng = parseFloat(markers[i][1]);
var trailhead_name = markers[i][2];
var myLatlng = new google.maps.LatLng(lat, lng);
var contentString = "<html><body><div><p><h2>" + trailhead_name + "</h2></p></div></body></html>";
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: "Coordinates: " + lat + " , " + lng + " | Trailhead name: " + trailhead_name
});
marker['infowindow'] = contentString;
global_markers[i] = marker;
google.maps.event.addListener(global_markers[i], 'click', function() {
infowindow.setContent(this['infowindow']);
infowindow.open(map, this);
});
}
你說的沒錯,這是範圍和封鎖的問題。您正在全局範圍內定義infoWindow,然後在您的onclick處理程序中使用它。這意味着您將始終打開您在for循環的最後一次迭代中創建的infoWindow。
更改此代碼:
infoWindow = new google.maps.InfoWindow({
content: contentString
});
這樣:
var infoWindow = new google.maps.InfoWindow({
content: contentString
});
您需要添加此
<script type="text/javascript"
src="http://maps.google.com/maps/api/js?sensor=false">
</script>
否則會一直在說谷歌沒有找到。
我剛剛嘗試過,同樣的問題仍然存在。每個html彈出包含相同的數據後點擊它:( – Genadinik 2011-03-17 18:43:14
@Genadinik也許問題不在infowindow,但內容 – kjy112 2011-03-17 18:44:39
剛剛檢查了數據庫和調試的內容,它應該肯定會有所不同 – Genadinik 2011-03-17 18:46:26