我知道这个话题已经多次讨论过,但我无法解决我的问题。 我想在我的地图上显示一些标记,每个标记都有一个点击事件。每个click事件都应该打开一个包含一些数据的infoWindow。
这是我写的;此代码在控制台中运行时没有任何错误,所有标记都正确显示,但点击时显示的信息窗口总是相同的...
//Global variable
var info = new google.maps.InfoWindow();
//... some other functions
function createMarker(map)
{
for(i = 0 ; i < loadedMarkers.length ; i++) {
(function(i) {
value = loadedMarkers[i];
var pos = new google.maps.LatLng(value.Latitude, value.Longitude);
var mapOptions = {
zoom: 10,
center: pos,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var marker = new google.maps.Marker({
position: pos,
map: map,
title: value.Title
});
var MarkerContent = "<div class=\"marker\">" +
"<h2>"+ value.Title +"</h2>" +
"<p>"+ value.Text +"</p>" +
"</div>";
info.setOptions({
content: MarkerContent,
size: new google.maps.Size(50, 50),
position: pos
});
google.maps.event.addListener(marker, 'click', function () {
info.open(map, marker);
});
}
)(i);
}
}
我听说过一些闭包问题(我是JS的新手),所以我试着将逻辑放在(function(i)...)中,但它总是为所有infowindow显示相同的内容。
有人能解释我哪里错了(为什么?)
非常感谢你
答案 0 :(得分:3)
您需要在打开时更新infowindow中的内容(否则显示最后的内容):
google.maps.event.addListener(marker, 'click', function () {
info.setOptions({
content: MarkerContent
});
info.open(map, marker);
});