我一直在玩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相对较新。
答案 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 } ?>