div の mousedown イベント ハンドラーでは、別の新しい div が作成され、本文に追加されます。
この新しい div はposition:fixed
、position:absolute
幅 100%、高さ 100% です。したがって、マウスダウンイベントをトリガーしたソース div をすぐにカバーします。現在、最新の Google Chrome (v30)、最新の Firefox (v24)、Opera v12.16、および古い Safari v5.1.1 (Windows の場合) では、マウスダウン イベントの後、本体に接続されたイベント リスナーでクリック イベントが発生しません。 . Internet Explorer (9 と 10 の両方)
のみが、後で本文のクリック イベントを発生させます。なんで?そして、これをどのように防ぐことができますか?これは実際には IE のバグですか?
HTML:
<div class="clickme">Click me</div>
CSS:
.clickme {
background-color: #BBB;
}
.overlay {
position: fixed; /* or absolute */
left: 0;
top: 0;
height: 100%;
width: 100%;
background-color: #000;
}
JavaScript:
$(document).on('click', function(event) {
console.log('body click');
});
$('.clickme').on('mousedown', function(event) {
console.log('div mousedown');
var mask = $('<div></div>');
mask.attr('class', 'overlay');
mask.appendTo('body');
});
いくつかの追加コメントを含む例を次に示します: http://jsfiddle.net/Fh4sK/5/
「クリックしてください」divをクリックした後、のみ
div mousedown
コンソールに書き込む必要がありますが、Internet Explorer では実際には
div mousedown
body click
どんな助けにも感謝します!ありがとう!
編集1:
クリック イベントをトリガーする条件を説明しているリソースをいくつか見つけました。
http://www.quirksmode.org/dom/events/click.html :
「クリック - 同じ要素で mousedown イベントと mouseup イベントが発生したときに発生します。」http://www.w3.org/TR/DOM-Level-3-Events/#events-mouseevent-event-order
"...一般に、関連するマウスダウンおよびマウスアップのイベントターゲットがevents は、mouseout または mouseleave イベントが介在しない同じ要素であり、関連する mousedown および mouseup イベントのイベント ターゲットが異なる場合、最も近い共通の祖先で click イベントと dblclick イベントを発生させる必要があります。"
現在の「正しい」動作が実際にどうあるべきか、100% 確信が持てません (おそらく IE がそれを正しく処理する唯一のブラウザでしょうか?)。最後の文から、body は両方の div 要素の「最も近い共通の祖先」であるため、body でクリック イベントを発生させるのが正しいようです。上記の参照された w3.org ページには、要素が削除された場合の動作を説明する他のステートメントがいくつかありますが、要素が削除されず、他の要素で覆われているため、これがここに当てはまるかどうかはわかりません。
編集2:
@Evan は、Microsoft に説明されている動作を削除するよう求めるバグ レポートを開きました: https://connect.microsoft.com/IE/feedback/details/809003/unexpected-click-event-triggered-when-the-elements-below-cursor- at-mousedown-and-mouseup-events-are-different
編集3:
Internet Explorer に加えて、Google Chrome も最近同じ動作をするようになりました: https://code.google.com/p/chromium/issues/detail?id=484655