【发布时间】:2013-01-18 13:51:48
【问题描述】:
在覆盖层(ExtInfoWindow)上处理 mousedown 事件后,我需要确保地图点击事件处理程序不执行,或者在地图点击事件处理程序中,我需要确定事件来自覆盖点击,而不是处理它。所以,某种方式我不需要处理两次。我在下面做错了什么?它用于 ExtInfoWindow 库,所以我不会在这里发布整个内容。 Page with map is here。点击信息窗口。在extinfowindow.js 中搜索“console.log”以查看问题所在。
// Initialization:
var stealEvents = ['mousedown', 'dblclick', 'DOMMouseScroll', 'onmousewheel'];
for( i=0; i < stealEvents.length; i++ ){
google.maps.event.addDomListener(this.container_, stealEvents[i], this.onClick_.bind(this));
}
if (map.ClickListener_ == null) {
//listen for map click, close ExtInfoWindow if open
map.ClickListener_ = google.maps.event.addListener(map, 'click',
function(event) {
if( map.getExtInfoWindow() != null ){
// problem: This executes even if the click is on the overlay!
map.closeExtInfoWindow();
}
}
);
}
// overlay click event handler
ExtInfoWindow.prototype.onClick_ = function(e) {
var evt = e ? e:window.event;
evt.cancelBubble = true;
evt.returnValue = false;
if (evt.stopPropagation) {
evt.stopPropagation();
}
if (evt.preventDefault) {
evt.preventDefault();
}
evt.stop(); // from google.maps.MouseEvent
};
【问题讨论】:
-
我建议使用 chrome 开发工具,设置断点,查看调用堆栈。 onClick 函数起初似乎是正确的,但是,考虑到
bind方法的影响,可能值得记录/检查“e”值。 [必须承认我不知道跨浏览器获取事件对象] 除此之外,我们需要一个工作应用程序来帮助您解决 IMO。 -
@EricG 在叠加层上,我认为这只是一个常见的 DOM 点击类型事件,但在地图上,它是一个带有 lat 和 lon 的 google 事件。 The app is here.在extinfowindow.js中搜索console.log
-
@EricG Another link。点击信息窗口。
-
请贴一个代码可读的例子。您的示例页面已缩小且不可读。
-
@Marcelo 我不确定您指的是什么代码。 extinfowindow.js 问题出在哪里,exam_find.js,find.php 代码都是可读/未缩小的。
标签: javascript google-maps google-maps-api-3 overlay dom-events