我需要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/

10-11 13:45