【发布时间】:2012-05-21 09:54:55
【问题描述】:
如果在关闭 infoWindow 时满足某些条件,我想阻止触发的默认关闭事件。有可能实现吗?我尝试了很多方法,例如:
- 停止事件传播
- 从回调方法返回 false
- infoWindow 没有公开任何阻止关闭的方法/属性。
如果可以,请告诉我。
【问题讨论】:
标签: google-maps google-maps-api-3 infowindow
如果在关闭 infoWindow 时满足某些条件,我想阻止触发的默认关闭事件。有可能实现吗?我尝试了很多方法,例如:
如果可以,请告诉我。
【问题讨论】:
标签: google-maps google-maps-api-3 infowindow
InfoWindow 并没有真正提供步进事件传播的方法。我不知道它是否适合您,但有一个InfoBox Utility Library 确实可以让您更好地控制烤箱的行为。具体到您的问题,InfoBoxOptionsapi-doc 对象包含以下属性:
enableEventPropagation,一个布尔值,允许您控制 InfoBox 是否会: 在 InfoBox 中传播 mousedown、click、dblclick 和 contextmenu 事件(默认为 false 以模仿 google.maps.InfoWindow 的行为) .如果 InfoBox 被用作地图标签,则将此属性设置为 true。 iPhone注意:此属性设置无效;事件总是被传播。
【讨论】:
您唯一能做的就是抓住closeclick 事件,这会导致您无处可去。
我曾经一起破解过一些东西,一个一次性的解决方案,它可能对你有用,也可能对你不起作用:我已经确定了一种方法来获取用户单击关闭的 x 标记,并将其删除。用户无法关闭 infoWindow。完全没有。你仍然可以,通过调用 .close()。
警告!这是一个黑客
var a=document.getElementById('map_canvas');
var b=a.getElementsByTagName('img');
var i, j=b.length;
for (i=0; i<j; i++) {
if(b[i].src.match('imgs8.png')){
if(b[i].style.left=='-18px') {
c=b[i].parentElement.parentElement;
console.log(c);
if(c.innerText.match("Map data")) {
console.log('no');
} else {
b[i].parentElement.removeChild(b[i]);
}
}
}
}
现在。如果您存储对 [x] 标记的引用,您甚至可以随意打开和关闭它。
编辑:
【讨论】:
您可以随时监听关闭事件,然后抛出一个 javascript 错误以阻止它关闭。例如:
google.maps.event.addListener(my_infoWindow, 'closeclick', function(e){
// Throw an error to stop the close
throw "stop close";
})
【讨论】: