正如标题所述,对于一个特定的事件(对我而言,这恰好是在打开一个新的google.maps.InfoWindow
时我希望能够关闭任何其他当前打开的信息窗口。现在,我可以在一次......但我想一次只打开一次。
我正在动态创建信息窗口(即我不知道会生成多少个),所以在当前信息窗口的click事件中(我希望所有其他打开的窗口关闭)我没有引用任何其他打开信息窗口来调用close()
。我想知道如何实现这一目标。我不是一个经验丰富的JavaScript程序员,所以我不知道我是否需要在这里使用反射或类似的东西。
最好的方法是将所有引用保存在某种集合中,然后在列表中循环关闭它们吗?
感谢。
答案 0 :(得分:64)
我遇到了同样的问题,并通过创建全局信息窗口修复了它。
var infowindow = new google.maps.InfoWindow();
然后我有一个函数在点击监听器上执行以下操作:
function getInfoWindowEvent(marker) {
infowindow.close()
infowindow.setContent("This is where my HTML content goes.");
infowindow.open(map, marker);
}
这实现了我认为你正在寻找b / c现在地图上只有一个信息窗口我只是关闭它,重新加载内容并再次打开给定标记。
答案 1 :(得分:8)
拥有全球信息,然后改变信息系统的位置和内容应该足够了。
var infowindow = new google.maps.InfoWindow();
// Call this function to open an infowindow i.e. on click.
function respondToClick(latlng) {
infowindow.setOptions({
position: latlng,
content" "Hello, world"
});
}
由于每次都使用相同的infowindow,因此您只能保证打开一个,并且它比创建然后销毁多个infowindows使用更少的资源/内存。
答案 2 :(得分:2)
infowindow是局部变量,窗口在时间不可用 关闭()
var latlng = new google.maps.LatLng(-34.397, 150.644); var infowindow
= null;
...
google.maps.event.addListener(marker, 'click', function() {
if (infowindow) {
infowindow.close();
}
infowindow = new google.maps.InfoWindow();
... });
...
答案 3 :(得分:1)
我决定创建一个动态创建的所有信息框的数组。当你点击任何第一个旅行数组然后你关闭所有只打开你点击过的数组。
var allInfos = [];
function closeInfos() {
for (i = 0; i < allInfos.length; i++) {
allInfos[i].close();
}
}
创建信息框之后,动态地将它们添加到数组中,如下所示:
allInfos.push(infowindow);
答案 4 :(得分:1)
您只需要一行:
$(".gm-style-iw").next().click();
在这个类中有一个div,'gm-style-iw',在infowindow里面。之后,关闭按钮的div。因此,此代码将单击地图中存在的每个infowindow关闭按钮
答案 5 :(得分:0)
这样做的最佳方式我认为......正在打开你打开的信息对象
我有两个对象, infos创建了所有infowindows,标记包含所有infowindows标记 所以我只执行这个循环infowindow对象的函数并关闭所有的infowindows
function CloseInfowindows() {
for (var mkey in infos) {
var mobj = markers[mkey];
mobj.infowindow.close();
}
}