我一直在与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/