-1

我尝试为我的所有标记添加信息窗口。但是我只为最后一个标记添加了一个 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);
     });
}
4

1 回答 1

-1

在此 stackoverflow 中找到了与您的问题类似的解决方案:Trying to bind multiple InfoWindows to multiple Markers on a Google Map and failed

基本上,您所要做的就是将您的 addlistener 函数包装在另一个函数中,为您的标记变量创建一个闭包 - 以便它绑定到信息窗口。在你的情况下,我相信你必须在你的 init() 之外添加 listenMarker 函数,并为标记和信息窗口传递变量,就像这样..

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);

这应该够了吧。

于 2012-05-25T15:07:11.767 回答