如何阻止覆盖mousedown事件进入地图?

时间:2013-01-18 13:51:49

标签: javascript google-maps javascript-events google-maps-api-3 overlay

在覆盖层(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

};

2 个答案:

答案 0 :(得分:3)

在第一个处理程序中执行MouseEvent.stop();。 IE:

google.maps.event.addListener(myOverlay, 'click', function(mouseEvent){
    mouseEvent.stop();
//Handle the click here
});

See the Google Maps documentation for MouseEvent

答案 1 :(得分:1)

没关系...... dom监听器正在监听mousedown事件而不是单击事件,因此点击没有被取消。我应该让它听取点击事件。

var stealEvents = ['click', 'dblclick', 'DOMMouseScroll', 'onmousewheel'];
for( i=0; i < stealEvents.length; i++ ){
    google.maps.event.addDomListener(this.container_, stealEvents[i], this.onClick_.bind(this));
}