我正在尝试做一些非常简单的事情,但是搜索已经空洞,出于某种原因我无法解决这个问题(我是一个JS初学者)。我试图通过标记中的onclick关闭infowindow。我知道你可以点击“x”关闭它,但目的更深。
我的代码:
function placeMarker(location) {
marker = new google.maps.Marker({
position: location,
map: map,
});
var infowindow = new google.maps.InfoWindow({
content: "<a href='#' id='link' onclick='infowindow.close()'>Close</a>"
});
infowindow.open(map,marker);
}
这样的事情可能吗?感谢
答案 0 :(得分:2)
假设您可能有多个infoWindow实例(当前代码会在您多次调用该函数时发生这种情况):
您需要使用节点而不是字符串content
。执行此操作时,您将能够在函数(闭包)中使用对infowindow的引用,并使用addDomListener
分配单击函数:
function placeMarker(location) {
var marker = new google.maps.Marker({
position: location,
map: map,
}),
infowindow = new google.maps.InfoWindow(),
content = document.createElement('a');
content.setAttribute('href','#');
content.appendChild(document.createTextNode('close'));
google.maps.event.addDomListener(content,'click',
function(){infowindow.close();})
infowindow.setContent(content);
infowindow.open(map,marker);
}
答案 1 :(得分:1)
是的,您的实施将按照您的列出假设:
infowindow
变量是全局的(在任何函数之外定义)答案 2 :(得分:0)
您不需要像onclick='infowindow.close()
那样的密切链接。 InfoWindow对象已经有一个“关闭”图标。 <强> X 强>
要确保在任何给定时间只打开一个InfoWindow,请将其设为一个全局对象,并使用关联的标记作为参数打开:
//Global
var infowindow = new google.maps.InfoWindow({});
然后......
function placeMarker(location) {
marker = new google.maps.Marker({
position: location,
map: map,
});
infowindow = new google.maps.InfoWindow({
position: location,
content: "Hello from this marker"
});
infowindow.open(map,marker);
}