4

子ノードを右クリックすると、ドキュメント ノードでクリック イベントが発生するという、Firefox で奇妙な問題が発生しています。

このコードは問題を示しています: http://jsfiddle.net/RyDZU/5/

更新版: http: //jsfiddle.net/RyDZU/10/

$(document).on("click","span",function(e) {
    console.log('span');
    console.log(e.isPropagationStopped());
});

$(document).on("click","div",function(e) {
    console.log('div');
    console.log(e.isPropagationStopped());
    e.stopPropagation();
    console.log(e.isPropagationStopped());
});

$(document).on("click",function(e) {
    console.log('body');
    console.log(e.isPropagationStopped());
});

HTML: <div><span>テスト</span></div>

「test」という単語を右クリックすると、firefox のコンソールに「body」という単語が出力されます (21)。IE 10 / Chrome にはありません。

このイベントが Firefox で発生しないようにするにはどうすればよいですか?

これは動作しません:

$("body").on("click", "span", function(e) {
    e.preventDefault();
    e.stopPropagation();
});
4

3 に答える 3

1

私は同じ問題に遭遇しています。緑色の四角を左クリックすると、handler2 (div 上) と handler3 (ドキュメント上) の両方でイベントが処理されるフィドルがあります。ただし、右クリックすると、handler3 のみが呼び出されます。つまり、div で右クリックしたときに伝播を停止する簡単な方法はありません。

jsfiddle

// requisite jsfiddle code snippet
function handler2() {
    console.log('in handler2');
}

function handler3() {
    console.log('in handler3');
}

$(document).ready(function () {
    $('#block2').on('click', handler2);
    $(document).on('click', handler3);
});

また、設定 dom.event.contextmenu.enabled と services.sync.prefs.sync.dom.event.contextmenu.enabled をいじってみましたが、この動作には影響しませんでした。

于 2013-09-16T08:25:45.203 に答える
1

event.whichこれは、(ドキュメントに添付されたイベント リスナーから) どのマウス ボタンが押されたかを確認するために使用することで修正できます。https://stackoverflow.com/a/12430795/1170489を参照してください。

于 2014-01-30T04:15:40.750 に答える
0

作る

$(document).on("click",function(e) {
    console.log('body');
    console.log(e.isPropagationStopped());
});

スクリプトの最初のハンドラー。自分のやり方で行うと、ドキュメントのクリック ハンドラーはスパン ハンドラーと div ハンドラーを非表示にします。

于 2013-06-03T13:51:27.000 に答える