遇到infowindow.setContent和OverlappingMarkerSpiderfier问题

时间:2012-06-29 17:54:17

标签: javascript google-maps-api-3

我一直在玩OVerlappingMArkerSpiderfier

https://github.com/jawj/OverlappingMarkerSpiderfier

我有一个添加标记的循环,但每个标记需要一个infoWindow作为其内容有一些独特的文本。

如果我执行以下操作:

content = '<div id="info">' +
                '<p><b><?php echo $row->Event ?></b></p>' +
                '<p><?php echo $row->Date ?></br>' +
                '<?php echo $row->City . ", " . $row->Country ?></p>' +
                '</div>';

oms.addListener('click', function(myMarker) {
         if(!iw){
            iw = new google.maps.InfoWindow();
         };

       iw.setContent(content);
      //  iw.setContent(myMarker.title);
        iw.open(map, myMarker);
      });

这只会将最后一个事件放入信息窗口。

如果我尝试这样做:

(function(content, myMarker){
    oms.addListener('click', function(myMarker) {
         if(!iw){
            iw = new google.maps.InfoWindow();
         };

       iw.setContent(content);
      //  iw.setContent(myMarker.title);
        iw.open(map, myMarker);
      });
})();

......根本不起作用

任何人都可以解释一下。

我没有提到:我对javascript相对较新。

1 个答案:

答案 0 :(得分:4)

首先,我会将iw = new google.maps.InfoWindow();设置在函数之外,以避免if(!iw)检查。

其次,oms.addListener适用于所有标记,而不仅仅是一个,所以这不应该在你的结果循环中(我假设这是一个$ row = $结果类型循环)。

要显示正确的内容,您需要在循环中执行类似marker.desc = content的操作,然后在addListener内执行iw.setContent(myMarker.desc);

这样的事情:

iw = new google.maps.InfoWindow();

oms.addListener('click', function(myMarker) {
    iw.setContent(myMarker.desc);
    iw.open(map, myMarker);
});

<?php while... { ?>
    ...
    content = '<div id="info">' +
        '<p><b><?php echo $row->Event ?></b></p>' +
        '<p><?php echo $row->Date ?></br>' +
        '<?php echo $row->City . ", " . $row->Country ?></p>' +
    '</div>';
    ...
    marker = new google.maps.Marker({
        ...
        ...
    });
    marker.desc = content;
    oms.addMarker(marker);
<?php } ?>