3

2 つのイベント リスナーを同じイベント ターゲットに登録するとします。最初に呼び出されるイベント ハンドラはどれですか。

例:

document.addEventListener("click", function() {
    // do something 1
}, true); // using the capturing phase

document.addEventListener("click", function() {
    // do something 2
}, true); // using the capturing phase

w3c仕様に答えが見つかりません。

DOM レベル 3 イベント

4

1 に答える 1

1

質問に答えるために追加された太字の強調 (w3c 仕様経由: http://www.w3.org/TR/DOM-Level-3-Events/#event-phase )

まず、実装は現在のターゲットを決定する必要があります。これは、最初から始まる、部分伝播パス内の次の保留中のイベント ターゲットである必要があります。イベント リスナーの観点からは、これはリスナーが登録されているイベント ターゲットである必要があります。

次に、実装は、現在のターゲットの候補イベント リスナーを決定する必要があります。これは、現在のターゲットに登録されているすべてのイベント リスナーのリストである必要があります。[HTML5] は、イベント ハンドラー属性を通じて登録されたリスナーの順序を定義します。一度決定された候補イベント リスナーは変更しないでください。リスナーを追加または削除しても、現在のターゲットの候補イベント リスナーには影響しません。

最後に、実装はすべての候補イベント ハンドラーを順番に処理し、次のすべての条件が満たされた場合に各ハンドラーをトリガーする必要があります...

私は個人的に常にこの動作に依存してきましたが、最新のブラウザーが仕様で説明されているものとは異なる動作をするのを見たことがありません。

于 2013-02-02T07:25:36.873 に答える