我尝试为所有标记添加infowindows。但是我只为最后一个标记添加了一个InfoWindow。 你能救我吗?
for (i = 0; i < events.length; i++) {
var contentString = '<div id="content">'+i+'bla-bla-bla</div>';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var newMarker = new google.maps.Marker({
position: new google.maps.LatLng(events[i][1], events[i][2]),
map: map,
title: events[i][0]
});
newMarker.categorysassasas = 2;
newMarker.category = events[i][3];
markers.push(newMarker);
google.maps.event.addListener(newMarker, 'click', function() {
infowindow.open(map,newMarker);
});
}
答案 0 :(得分:-1)
在此stackoverflow中找到了与您的问题类似的解决方案:Trying to bind multiple InfoWindows to multiple Markers on a Google Map and failing
基本上你要做的就是将你的addlistener函数包装在另一个函数中,为你的标记变量创建一个闭包 - 这样它就被绑定到了infowindow。在你的情况下,我相信你必须在init()之外添加listenMarker函数,并传递marker和infowindow的变量,就像这样..
function listenMarker (marker, info)
{
// so marker is associated with the closure created for the listenMarker function call
google.maps.event.addListener(marker, 'click', function() {
info.open(map, marker);
});
}
然后在你调用addlistener事件的for循环中,将其替换为:
listenMarker(newMarker, infowindow);
这应该可以解决问题。