1

オーバーレイ (ExtInfoWindow) で mousedown イベントを処理した後、マップ クリック イベント ハンドラーが実行されないようにするか、マップ クリック イベント ハンドラーで、イベントがオーバーレイ クリックから発生していることを確認する必要があります。扱いません。そのため、何らかの方法で2回処理しないようにする必要があります。以下で何が間違っていますか?これは ExtInfoWindow ライブラリ用なので、ここではすべてを掲載しません。地図のあるページはこちら. 情報ウィンドウをクリックします。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

};
4

2 に答える 2

3

Execute MouseEvent.stop(); in the first handler. IE:

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

See the Google Maps documentation for MouseEvent

于 2013-01-18T15:01:40.060 に答える
1

気にしないでください...domリスナーは、クリックイベントではなくマウスダウンイベントをリッスンしていたため、クリックはキャンセルされませんでした。クリックイベントをリッスンする必要がありました。

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));
}
于 2013-02-04T22:59:26.187 に答える