63

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) などではないと思います。

4

4 に答える 4

39

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

とはいえ、HTML 5 ドラフトの推奨事項では、イベントをキューに入れ、ディスパッチする方法 (イベント ループ) を指定しようとしています。

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

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

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

[...]ユーザー エージェントは、マウスおよびキー イベント (ユーザー インタラクション タスク ソース) 用に 1 つのタスク キューを持ち、その他すべてのために別のタスク キューを持つことができます。ユーザー エージェントは、他のタスクよりも 4 分の 3 の時間、キーボードとマウスのイベントを優先し、インターフェイスの応答性を維持しながら他のタスク キューを枯渇させず、1 つのタスク ソースからのイベントを順不同で処理することはありません。[...]

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

于 2008-11-11T21:55:25.247 に答える
24

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

  1. マウスオーバー
  2. マウス移動
  3. マウスアウト

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

  1. キーダウン
  2. キープレス
  3. キーアップ
于 2016-06-08T06:06:13.537 に答える
5

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

彼はまた、包括的な一連のテストをバンドルしています。

于 2014-10-09T13:56:19.370 に答える