我需要JavaScript和Google Maps API的帮助。
我的网站上有一张Google Maps地图,上面显示标记,单击这些标记会显示自定义InfoBox
。
单击标记后,将为此InfoBox
创建一个新对象:
google.maps.event.addListener(marker, 'click', function() {
infoBox = new InfoBox({id: id, content: description, latlng: marker.getPosition(), map: map});
});
访客连续单击两个标记时,将面临两个
InfoBox
。我运行了两行代码,当用户在地图上单击鼠标左键或单击右上角的叉号时,它们会隐藏InfoBox
:google.maps.event.addDomListener(closeImg, 'click', removeInfoBox(this));
google.maps.event.addDomListener(map, 'click', removeInfoBox(this));
我想发生的是,当用户单击一个标记时,所有先前的标记都将被隐藏(因此,每次单击一个标记后,将只隐藏一个先前的
InfoBox
)。我正在努力做到这一点。如果在所有带有'click'事件的标记上创建
DomListener
,则永远不会弹出InfoBox
。如果在创建removeInfoBox(this);
的新对象之前放InfoBox
,也永远不会显示InfoBox
。防止出现多个
InfoBox
的正确方法在哪里和如何出现? 最佳答案
我找到了一篇有关如何删除标记并跟踪它们的文章,我可以熟练使用我的脚本。
首先,我声明用于存储打开的infoBox的数组和删除它们的函数(clearOverlays()):
// Declare global array for hiding infowindows
var infowindowsArray = [];
function clearOverlays(){
if(infowindowsArray){
for (i in infowindowsArray){
infowindowsArray[i].setMap(null);
}
}
}
然后,当我为标记的click事件创建一个侦听器时,它将向该标记添加新的infoBox。首先,我使用clearOverlays()函数清除所有其他infoBox。然后创建新的infoBox并将其推入数组:
google.maps.event.addListener(marker, 'click', function() {
clearOverlays();
infoBox = new InfoBox({id: id, content: description, latlng: marker.getPosition(), map: map});
infowindowsArray.push(infoBox);
});
这解决了我与自定义创建的infoBox的问题。
关于javascript - 如何删除一个类创建的所有实例/自定义对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7139844/