如何删除一个类创建的所有实例/自定义对象?

时间:2011-08-21 17:26:50

标签: javascript google-maps

我需要一些JavaScript和Google Maps API的帮助。

我的网站上有一张谷歌地图地图,上面显示了标记,点击时会显示自定义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

我正在努力完成这项工作。如果我使用“点击”事件在所有标记上创建DomListener,我就永远不会弹出InfoBox。如果我在创建removeInfoBox(this);的新对象之前添加InfoBox,我也永远不会显示InfoBox

在哪里以及如何防止出现多个InfoBox的正确方法?

1 个答案:

答案 0 :(得分:4)

我发现了一篇关于如何删除标记并跟踪它们的帖子,我可以熟悉我的脚本。

首先我声明数组用于存储打开的infoBox'es和删除它们的函数(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并将其推入数组:

google.maps.event.addListener(marker, 'click', function() {
    clearOverlays();
    infoBox = new InfoBox({id: id, content: description, latlng: marker.getPosition(), map: map});
    infowindowsArray.push(infoBox);
});

这解决了我自定义创建的infoBox'es的问题。