我正在尝试在我的页面上放置带有多个标记(> 1000)的google地图,每个标记都有其自己的唯一信息窗口。我通过数组添加标记,标记似乎很好,但是所有信息窗口具有相同的确切内容。我很茫然,非常感谢您的信息。这是我的代码:
<script>
var map;
var markersArray = [];
var infowindow = new google.maps.InfoWindow({
content: ''
});
function initialize() {
bounds = new google.maps.LatLngBounds();
usa = new google.maps.LatLng(37.09024, -95.712891);
var myOptions = {
zoom: 4,
center: usa,
mapTypeId: google.maps.MapTypeId.ROADMAP,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.SMALL
}
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
plotMarkers();
}
// here is where the array content is contained
var webApps = [<%=strArray%>];
function plotMarkers(){
var i;
for(i = 0; i < webApps.length; i++){
codeAddresses(webApps[i]);
}
}
function codeAddresses(address){
// other variables
lat = address[3];
lng = address[4];
desc = address[0]
myLatlng = new google.maps.LatLng(lat,lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(desc);
infowindow.open(map, this);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<div id="map_canvas" style="width: 100%; height: 600px;"></div>
最佳答案
看起来desc
是全局变量。因此,在循环的每次迭代中,都将其设置为其他值,这意味着它将始终等于您迭代的最后一项的描述。
尝试将var
放在其前面,以使其成为局部变量。例如:var desc = address[0];
。
当您执行此操作时,称为“关闭”的概念将确保您创建的每个侦听器都将在创建desc
时引用其值,而不是最后设置的值。
避免由于某些原因使用全局变量是一种最佳实践,这是其中之一。您应该养成在变量前加上var
的习惯。
有关可变范围的信息:
http://msdn.microsoft.com/en-us/library/ie/bzt2dkta(v=vs.94).aspx
有关关闭的信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures
关于javascript - 谷歌用多个信息窗口映射多个标记,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18007670/