web-dev-qa-db-ja.com

DOMイベントの優先順位

イベントはJavaScriptでどのような優先順位で処理されますか?

こちらがアルファベット順のイベントです...

  1. onabort-画像の読み込みが中断されました
  2. onblur-要素がフォーカスを失う
  3. onchange-ユーザーがフィールドの内容を変更します
  4. onclick-マウスがオブジェクトをクリックする
  5. ondblclick-オブジェクトをマウスでダブルクリック
  6. onerror-ドキュメントまたはイメージのロード時にエラーが発生します
  7. onfocus-要素がフォーカスを取得します
  8. onkeydown-キーボードのキーが押された
  9. onkeypress-キーボードのキーが押されているか押されている
  10. onkeyup-キーボードのキーが離された
  11. onload-ページまたは画像の読み込みが完了しました
  12. onmousedown-マウスボタンが押された
  13. onmousemove-マウスが移動した
  14. onmouseout-マウスが要素の外に移動した
  15. onmouseover-マウスが要素の上に移動した
  16. onmouseup-マウスボタンが離された
  17. onreset-リセットボタンがクリックされた
  18. onresize-ウィンドウまたはフレームのサイズが変更されます
  19. onselect-テキストが選択されています
  20. onsubmit-送信ボタンがクリックされた
  21. onunload-ユーザーはページを終了します

イベントキューからどのような順序で処理されますか?

優先順位は先入れ先出し(FIFO)ではありません。

54
dacracot

これは、私が知る限り、過去に明確に定義されていませんでした。さまざまなブラウザがイベントの順序付けを自由に実装できますが、適切と思われます。ほとんどはすべての実用的な目的に十分に近づいていますが、ブラウザーが多少異なる奇妙なEdgeのケースがあり、そしてもちろん、特定のブラウザーが特定のイベントを送信できない多くのケースまったく)。

つまり、 HTML 5ドラフトの推奨 は、イベントをキューに入れてディスパッチする方法を指定しようとします- イベントループ

イベント、ユーザーインタラクション、スクリプト、レンダリング、ネットワーキングなどを調整するには、ユーザーエージェントは、このセクションで説明するイベントループを使用する必要があります。

ユーザーエージェントごとに少なくとも1つのイベントループがあり、関連する類似の元のブラウジングコンテキストのユニットごとに最大で1つのイベントループが必要です。

イベントループには1つ以上のタスクキューがあります。タスクキューは、タスクの順序付きリストです[...]ユーザーエージェントがタスクをキューに登録する場合、関連するイベントループのタスクキューの1つに特定のタスクを追加する必要があります。特定の1つのタスクソースからのすべてのタスクは常に同じタスクキューに追加する必要がありますが、異なるタスクソースからのタスクは異なるタスクキューに配置できます。 [...]

[...]ユーザーエージェントは、マウスとキーイベント(ユーザー操作タスクソース)用に1つのタスクキューを持ち、その他のすべてに別のタスクキューを持つことができます。ユーザーエージェントは、キーボードイベントとマウスイベントを4分の3の時間で他のタスクよりも優先することができます。これにより、インターフェイスの応答性は維持されますが、他のタスクキューが不足することはありません。 [...]

最後のビットに注意してください。どのイベントをグループ化して順番に処理するか、および特定のタイプのイベントに与えられる優先順位を決定するのは、ブラウザーの実装次第です。したがって、現在または将来、すべてのブラウザーがallイベントを固定された順序でディスパッチすることを期待する理由はほとんどありません。

34
Shog9

相対イベントが呼び出されるシーケンスを知りたい場合は、以下を参照してください。これまでのところ、Chromeでのみテストしました。

  1. マウスオーバー
  2. マウスムーブ
  3. マウスアウト

  1. マウスダウン
  2. 変更(フォーカスされた入力で)
  3. ぼかし(フォーカスされた要素上)
  4. フォーカス
  5. マウスアップ
  6. クリック
  7. dblclick

  1. キーダウン
  2. キープレス
  3. キーアップ
17
Ricky Boyce

マウス/タッチイベントを表示している場合は、Patrick H. Laukeが この件に関する講演 を公開しています。間違いなく興味深い読み物であり、さまざまなブラウザ、さまざまなデバイス、さまざまな標準のすべての癖を扱っています。

彼は 包括的なテストセット もバンドルしています。

4
tomekwi