1

我一直在玩 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 比较陌生。

4

1 回答 1

4

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

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

要显示正确的内容,您需要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 } ?>
于 2012-07-24T16:47:42.493 回答