OverlappingMarkerSpiderfier

OverlappingMarkerSpiderfier

我一直在与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相对陌生。

最佳答案

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

其次,oms.addListener适用于所有标记,而不仅仅是一个标记,因此这不应位于结果循环之内(我假设这需要一段时间$ 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 } ?>

关于javascript - infowindow.setContent和OverlappingMarkerSpiderfier遇到问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11266657/

10-09 20:34