UI イベント

W3C 作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-uievents-20260221/
最新公表バージョン:
https://www.w3.org/TR/uievents/
編集者草稿:
https://w3c.github.io/uievents/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/uievents/
フィードバック:
GitHub
仕様内インライン
編集者:
Xiaoqian Wu (W3C)
前任編集者:
Gary Kacmarcik (Google)
Travis Leithead (Microsoft)
Doug Schepers (2008年3月 - 2011年5月)
テスト:
web-platform-tests uievents/ (進行中の作業)

要約

この仕様書は、[DOM]で定義されたDOMイベントオブジェクトを拡張するUIイベントを定義します。UIイベントは、主に視覚的なユーザーエージェントがマウスやキーボード入力などのユーザー操作を処理するために実装するイベントです。

この文書のステータス

このセクションは、本書が発行された時点の文書のステータスについて説明します。現在のW3C発行物一覧や、本技術レポートの最新版は、W3C標準・草案インデックスで確認できます。

本文書はWeb Applications Working Groupによって 作業草案勧告トラック)として公開されました。 作業草案としての公開は、W3C及びその加盟団体による承認を意味するものではありません。

本文書はドラフトであり、今後、随時更新、差し替え、もしくは他の文書により廃止される可能性があります。 進行中の作業以外として本書を引用することは適切ではありません。

本書はW3C特許ポリシーの下で活動するグループによって作成されました。W3Cは、グループの成果物に関連する特許開示の公開リストを管理しています。そこには特許開示の手続き手順も掲載されています。特許のエッセンシャルクレームを有すると信じられる場合、その情報はW3C特許ポリシー第6節に従い開示しなければなりません。

この文書は 2025年8月18日 W3Cプロセス文書 に従って管理されています。

1. はじめに

1.1. 概要

UI Eventsは主に2つの目的で設計されています。最初の目的は、event システムを設計することであり、これにより event listeners の登録を可能にし、イベントがツリー構造を通じて流れる仕組みを記述します。さらに、本仕様ではユーザーインターフェイス制御やドキュメントの変更通知のための標準的なイベントモジュールを提供し、これらの各イベントモジュールに関するコンテキスト情報も定義します。

UI Eventsの2つ目の目的は、現行のブラウザで使用されているイベントシステムの共通部分集合を提供することです。これは、既存のスクリプトやコンテンツの相互運用性を促進するためです。この目的が完全な後方互換性を持って達成されるとは期待されていませんが、可能な限りその達成を目指しています。

1.1.1. マウス及びホイールイベント

この仕様の「マウスイベント」と「ホイールイベント」のセクションは、Pointer Events仕様 [pointerevents4] に移動されました。

1.2. 適合性

このセクションは規範的です。

本仕様書内では、キーワード MUSTMUST NOTREQUIREDSHALLSHALL NOTSHOULDSHOULD NOTRECOMMENDEDMAY、および OPTIONAL[RFC2119] で説明されている通りに解釈されます。

本仕様はDOM Level 3 Core仕様書 [DOM-Level-3-Core] の文脈で理解されるべきであり、DOM実装に関する一般的な考慮事項が適用されます。例えば、namespace URIs の扱いについては XML Namespaces で論じられています。 適合性 についての追加情報は、DOM Level 3 Core仕様書 [DOM-Level-3-Core] を参照してください。user agent は本仕様に適合するために他の仕様全体に適合する必要はありませんが、本仕様で言及されている他仕様の特定部分には必ず適合しなければなりません(例:適合するUI Events user agentDOMString データ型を [WebIDL] で定義されている通りにサポートしなければなりませんが、UI Eventsに適合するだけで [WebIDL] で定義されているすべてのメソッドやデータ型をサポートする必要はありません)。

本仕様では、異なる user agent、仕様、コンテンツ著者向けに複数の適合クラスを定義しています:

1.2.1. Webブラウザおよびその他の動的または対話的な user agents

動的または対話的な user agent、ここでは「ブラウザ」と呼びます(Webブラウザ、AT(アクセシビリティ技術)アプリケーション、またはそれに類するプログラムなど)、は次の条件を満たす場合UI Eventsに適合します:

適合するブラウザは、条件が満たされたとき、適切な EventTargetイベントを発火 しなければなりません。

ブラウザは、本ドキュメントで定義されたインターフェイスおよび関連する event types を実装している場合、UI Eventsに特化して適合しているといえます。

適合するブラウザは、スクリプティング、宣言型インタラクティビティ、またはその他の方法で、イベントの検出および発火を本仕様で記述された方法でサポートしなければならず、また event type 用に仕様されたAPIもサポートしなければなりません。

その他の適合基準をすべて満たすことに加えて、適合するブラウザは後方互換性のために deprecated と記された仕様の機能を実装してもかまいませんが、その実装は推奨されません。

適合するブラウザは、本仕様にない機能(ただし本仕様で定義されたインターフェイス、イベント、またはその他の機能を用いるもの)をサポートしたり、実装に応じて追加のインターフェイスや event types を実装してもかまいません。こうした機能は将来の仕様で標準化されることもあります。

本仕様の必須部分すべてに適合しないブラウザは、UI Eventsへの適合を主張してはなりません。部分的に本仕様に適合する実装は、その特定部分への適合のみを主張できます。

適合するブラウザは、Web IDL仕様 [WebIDL] で説明されているように、インターフェイス定義言語(IDL)断片の 適合する実装 でもなければなりません。

1.2.2. オーサリングツール

コンテンツオーサリングツールは、本仕様で定義された event types を一貫して使用するコンテンツを生成する場合、UI Eventsに適合しています。

オーサリングツールは、生成するコンテンツが本仕様で deprecated と記された機能を使用している場合、そのコンテンツについてUI Eventsへの適合を主張してはなりません。

適合するコンテンツオーサリングツールは、コンテンツ著者が、コンテンツ文書で使用されるすべての event types およびインターフェイスを、すべての host languages に対して使用できるよう手段を提供すべきです。

1.2.3. コンテンツ著者およびコンテンツ

コンテンツ 著者 は、そのコンテンツが本仕様で定義された event types を一貫して使用する場合、UI Events適合コンテンツを作成したことになります。

コンテンツ著者は、本仕様で deprecated とされる機能を使用すべきではなく、代替手段(本仕様や他仕様で定義されているもの)を利用すべきです。

適合するコンテンツは、本仕様で記述されるインターフェイスや event types の意味論を守らなければなりません。

コンテンツ著者は、アクセシビリティ国際化 のガイドライン仕様で説明されるベストプラクティスに従うことが推奨されます。

1.2.4. 仕様およびホスト言語

仕様または host language は、[DOM] で定義されているイベントフロー機構、インターフェイス、イベント、またはその他の機能を参照し、これらの機能を非互換な方法で拡張しない場合、UI Eventsに適合します。

仕様または host language が、本ドキュメントで定義されたインターフェイスおよび関連する event types を参照し、使用する場合、UI Eventsに特化して適合しています。適合する仕様は、仕様に応じて追加のインターフェイスや event types を定義したり、UI Eventsのインターフェイスや event types を、この仕様で定義されている内容と矛盾または衝突しない方法で拡張してもかまいません。

UI Eventsを参照する仕様や host languages は、本仕様で deprecated とされる機能を使用または推奨すべきではなく、可能ならば推奨される代替手段を利用または推奨すべきです。

2. 記述上の慣例

本仕様は提案されたW3C仕様記述慣例 に従っていますが、以下の追加事項があります:

さらに、本仕様では特定の用語が特別な意味で用いられます。「実装」という用語は、本仕様を実装するブラウザ、コンテンツオーサリングツール、その他の user agent を指します。一方、コンテンツ著者は、本仕様で説明されているインターフェイス、メソッド、属性、イベント等を利用してWebアプリケーションを作成する人を指し、ユーザーはそのWebアプリケーションを実装上で利用する人です。

最後に:

これは注記です。

これは未解決の課題です。

これは警告です。

interface Example {
    // This is an IDL definition.
};

3. 基本イベントインターフェイス

[DOM] で定義される基本的なイベントインターフェイスは、UI Eventsに不可欠です。これらの基本イベントインターフェイスは実装で常にサポートされなければなりません:

本仕様で定義されるイベント型はこれらの基本インターフェイスから派生し、派生元のインターフェイスが持つすべての属性、メソッド、定数を継承しなければなりません。

以下の図は本仕様で記述されるインターフェイスの継承構造を示します。

本仕様で定義されるインターフェイスの継承関係の図示
本仕様で定義されるインターフェイスの継承関係の図示

3.1. イベント型一覧

各イベントは イベント型 と呼ばれる型に関連づけられ、イベントオブジェクトの type 属性として利用できます。イベント型は DOMString 型でなければなりません。

DOMのサポートレベルや表示(例:画面)・操作(例:マウス、キーボード、タッチスクリーン、音声)用デバイスによって、こうしたイベント型は実装によって生成されます。[XML][HTML5] アプリケーションで使用される場合、それぞれの言語仕様によってイベント型に関連する意味論や範囲(特に イベントターゲット の可能性)が制限されることがあります。詳細や、本ドキュメントに定義されていないイベント型を探す場合は、各言語仕様を参照してください。

次の表は、本仕様で記述されるイベント型の情報まとめです。

イベントタイプ 同期 / 非同期 バブリングフェーズ 信頼済みイベントターゲット種別 DOMインターフェース キャンセル可能 デフォルトアクション
abort 同期 いいえ Window, Element Event いいえ なし
beforeinput 同期 はい Element InputEvent はい DOM要素の更新
blur 同期 いいえ Window, Element FocusEvent いいえ なし
compositionstart 同期 はい Element CompositionEvent はい 文字組み立てシステム候補ウィンドウの表示
compositionupdate 同期 はい Element CompositionEvent いいえ なし
compositionend 同期 はい Element CompositionEvent いいえ なし
error 非同期 いいえ Window, Element Event いいえ なし
focus 同期 いいえ Window, Element FocusEvent いいえ なし
focusin 同期 はい Window, Element FocusEvent いいえ なし
focusout 同期 はい Window, Element FocusEvent いいえ なし
input 同期 はい Element InputEvent いいえ なし
keydown 同期 はい Element KeyboardEvent はい イベントによって異なる: beforeinputinputイベントのトリガー; 文字組み立てシステムの起動; blurおよびfocusイベント; keypress イベント(サポートされる場合); アクティベーション動作; その他のイベント
keyup 同期 はい Element KeyboardEvent はい なし
load 非同期 いいえ Window, Document, Element Event いいえ なし
select 同期 はい Element Event いいえ なし
unload 同期 いいえ Window, Document, Element Event いいえ なし

本仕様で非推奨とされるイベント一覧については、ドキュメント末尾の 旧イベント型 付録を参照してください。

上記の表の解釈例:load イベントは、そのイベント向けに Element ノード上でキャプチャおよびターゲットフェーズでイベントリスナーが発火します。このイベントはキャンセルできません。event listenerWindowDocumentElement ノード以外や、バブリングフェーズのみで登録された場合、この event listener は発火しません。

上記の表は記載されたイベント型について決定的なものとして解釈しないでください。例えば load イベントは他仕様でも使用されています(例:XMLHttpRequest)。同様に、dispatchEvent()任意の EventTarget を実装するオブジェクトでリスナーに非信頼イベントを発火できます。

上記イベント型に関連付けられるイベントオブジェクトは追加のコンテキスト情報を持っています。詳細はDOMインターフェイスの説明を参照してください。

3.2. ユーザーインターフェイスイベント

ユーザーインターフェイスイベントモジュールは、ユーザーインターフェイスやドキュメント操作に関連する基本的なイベント型を含みます。

3.2.1. UIEvent インターフェイス

DOM Level 2 で導入

UIEvent インターフェイスは、ユーザーインターフェイスイベントに関連する特定のコンテキスト情報を提供します。

UIEvent インターフェイスのインスタンスを生成するには、UIEvent コンストラクタを使用し、必要に応じて UIEventInit 辞書を渡します。

新しく定義されるイベントについては、ユーザーインターフェイスに関連するからといって UIEvent インターフェイスを必ず継承する必要はありません。UIEventInit のメンバーがそのイベントに意味を持つ場合のみ継承してください。

3.2.1.1. UIEvent
[Exposed=Window]
interface UIEvent : Event {
  constructor(DOMString type, optional UIEventInit eventInitDict = {});
  readonly attribute Window? view;
  readonly attribute long detail;
};
UIEvent . view
view 属性は、そのイベントが生成された Window を示します。

この属性の 未初期化値null でなければなりません。

UIEvent . detail
Event の種類に応じて、そのイベントに関する詳細情報を指定します。

この属性の 未初期化値0 でなければなりません。

3.2.1.2. UIEventInit
dictionary UIEventInit : EventInit {
  Window? view = null;
  long detail = 0;
};
UIEventInit . view
この値は、このイベントが発火されるグローバル環境の Window オブジェクトに初期化すべきです。このイベントが要素に対して発火される場合は、view プロパティはその要素の ownerDocument を含む Window オブジェクトに設定します。
UIEventInit . detail
この値はアプリケーション固有の数値で初期化されます。

3.2.2. UIEvent のアルゴリズム

3.2.2.1. UIEvent を初期化する
入力

event:初期化する UIEvent

eventType:イベント型を含む DOMString

eventTarget:イベントの EventTarget

bubbles:このイベントがバブリングする場合は true

cancelable:このイベントがキャンセル可能な場合は true

出力

なし

  1. 基本となる Event 属性を初期化します:

    1. Event を初期化するevent, eventType, bubbles, cancelable で呼び出す

    2. event.targeteventTarget を設定

  2. 以下の公開属性を初期化します:

    1. event.vieweventTargetノード文書Window オブジェクトを設定

    2. event.detail に 0 を設定

  3. 以下の歴史的属性を初期化します:

    1. event.which に 0 を設定する(MouseEvent および KeyboardEvent の両方で使用される)

3.2.3. UIEvent 型

ユーザーインターフェイスイベント型を以下に示します。これらのイベントの一部は、ユーザーインターフェイスから生成された場合 UIEvent インターフェイスを使用しますが、詳細は各イベントごとに記載されています。

3.2.3.1. load
load
インターフェイス UIEvent (ユーザーインターフェイスから生成された場合)、それ以外は Event
同期 / 非同期 非同期
バブリング いいえ
信頼できるターゲット WindowDocumentElement
キャンセル可能 いいえ
デフォルト動作 なし
コンテキスト
(信頼イベント)

DOM実装がリソース(例:ドキュメント)および依存リソース(画像、スタイルシート、スクリプトなど)の読み込みを完了したとき、user agent はこのイベントを発火しなければなりません。依存リソースのロード失敗は、親リソースがDOM経由でアクセス可能であれば、このイベントの発火を妨げてはなりません。このイベント型が発火される場合、少なくとも Document ノードでこのイベントを発火する必要があります。

旧来の理由により、ドキュメント内のリソース(例:画像)に対する load イベントは、HTML 実装では伝播パスに Window を含みません。詳細は [HTML5] を参照してください。

3.2.3.2. unload
unload
インターフェイス UIEvent (ユーザーインターフェイスから生成された場合)、それ以外は Event
同期 / 非同期 同期
バブリング いいえ
信頼できるターゲット WindowDocumentElement
キャンセル可能 いいえ
デフォルト動作 なし
コンテキスト
(信頼イベント)

DOM実装が環境からリソース(例:ドキュメント)や依存リソース(画像、スタイルシート、スクリプトなど)を除去したとき、user agent はこのイベントを発火しなければなりません。このイベント型の発火後にドキュメントはアンロードされる必要があります。このイベント型が発火される場合、少なくとも Document ノードでこのイベントを発火する必要があります。

3.2.3.3. abort
abort
インターフェイス UIEvent (ユーザーインターフェイスから生成された場合)、それ以外は Event
同期 / 非同期 同期
バブリング いいえ
信頼できるターゲット WindowElement
キャンセル可能 いいえ
デフォルト動作 なし
コンテキスト
(信頼イベント)

リソースのロードが中断されたとき(例:ユーザーがロード中にキャンセルした場合)、user agent はこのイベントを発火しなければなりません。

3.2.3.4. error
error
インターフェイス UIEvent (ユーザーインターフェイスから生成された場合)、それ以外は Event
同期 / 非同期 非同期
バブリング いいえ
信頼できるターゲット WindowElement
キャンセル可能 いいえ
デフォルト動作 なし
コンテキスト
(信頼イベント)

リソースのロードに失敗した場合や、ロードされたが意味的に解釈できない場合(例:不正な画像、スクリプト実行エラー、非整形式XMLなど)、user agent はこのイベントを発火しなければなりません。

3.2.3.5. select
select
インターフェイス UIEvent (ユーザーインターフェイスから生成された場合)、それ以外は Event
同期 / 非同期 同期
バブリング はい
信頼できるターゲット Element
キャンセル可能 いいえ
デフォルト動作 なし
コンテキスト
(信頼イベント)

ユーザーがテキストを選択したとき、user agent はこのイベントを選択後に発火しなければなりません。

本仕様では選択されたテキストへのアクセスに関するコンテキスト情報は提供しません。該当する場合、ホスト言語は、ユーザーがどのように内容を選択できるか(国際的な言語慣習も考慮)、select イベントがどのタイミングで発火されるか、コンテンツ著者がユーザー選択内容にどのようにアクセスできるかを定義するべきです。

ユーザー選択内容へアクセスするには、コンテンツ著者は ホスト言語のネイティブ機能(HTML 編集APIの Document.getSelection() メソッドなど)を使用します。[Editing]

select イベントはすべての要素や言語で利用できるとは限りません。例えば [HTML5] では select イベントはフォームの inputtextarea 要素でのみ発火できます。 実装は、フォームコントロール外のテキスト選択やSVGなどの画像やマークアップ選択など、適切と判断されるコンテキストで select イベントを発火してもかまいません。

3.3. フォーカスイベント

このインターフェイスと関連するイベント型、および § 3.3.2 フォーカスイベント順序は、User Agent Accessibility Guidelines 2.0 [UAAG20] で定義された概念・指針に基づいて設計されています。 特に フォーカスメカニズムglossary の focus の定義に注意しています。

3.3.1. FocusEvent インターフェイス

本仕様で導入

FocusEvent インターフェイスは、フォーカスイベントに関連する特定のコンテキスト情報を提供します。

FocusEvent インターフェイスのインスタンスを生成するには、FocusEvent コンストラクタを使用し、必要に応じて FocusEventInit 辞書を渡します。

3.3.1.1. FocusEvent
[Exposed=Window]
interface FocusEvent : UIEvent {
  constructor(DOMString type, optional FocusEventInit eventInitDict = {});
  readonly attribute EventTarget? relatedTarget;
};
FocusEvent . relatedTarget
イベントの種類に応じて、フォーカスイベントに関連する二次的な EventTarget を識別するために使用します。

ネストされたブラウジングコンテキストとのセキュリティ上の理由から、入出時に関連する EventTargetnull であるべきです。

この属性の 未初期化値null でなければなりません。

3.3.1.2. FocusEventInit
dictionary FocusEventInit : UIEventInit {
  EventTarget? relatedTarget = null;
};
FocusEventInit . relatedTarget
relatedTarget は、focusfocusin イベントの場合はフォーカスを失う要素、blurfocusout イベントの場合はフォーカスを得る要素に初期化してください。

3.3.2. フォーカスイベント順序

本仕様で定義されるフォーカスイベントは、相互間で一定の順序で発生します。以下は、フォーカスが要素間で移動する典型的なイベントシーケンスです(最初はどの要素にもフォーカスがないと仮定):

イベント型 備考
ユーザーがフォーカスを移動
1 focus 最初のターゲット要素がフォーカスを受け取った後に送信
2 focusin focusイベントの直後
ユーザーがフォーカスを移動
3 blur 最初のターゲット要素がフォーカスを失った後に送信
4 focusout blurイベントの直後
5 focus 2番目のターゲット要素がフォーカスを受け取った後に送信
6 focusin focusイベントの直後

本仕様では focus()blur() といったメソッドを使った場合のフォーカスイベントの動作は定義しません。該当メソッドが定義されている仕様を参照してください。

3.3.3. ドキュメントフォーカスとフォーカスコンテキスト

このイベントモジュールには、ドキュメントの フォーカス の変更通知のイベント型が含まれます。フォーカスコンテキストには、次の3つの区分があります:

本仕様で定義されるイベント型はドキュメントフォーカスのみを対象にしており、イベント詳細で識別される event target はウィンドウ内のドキュメント(または複数ドキュメント)の一部でなければならず、ブラウザやOSの一部であってはなりません(フォーカスコンテキスト間の切り替え時も同様)。

通常、ドキュメントには常にフォーカスされた要素(ドキュメント要素自身の場合も含む)と持続的な フォーカスリング があります。フォーカスコンテキスト間を切り替える場合も、ドキュメントの現在のフォーカス要素とフォーカスリングは通常そのまま維持されます。例えば、3つのフォーカス可能要素があるドキュメントで、2番目の要素がフォーカスされている場合に、ユーザーがOSのフォーカスを他アプリに移し、再びブラウザに戻しても、ドキュメント内では2番目の要素がフォーカスされており、Tabキー操作で3番目の要素にフォーカスが移ります。ホスト言語 は、特定の要素がフォーカスを受け取る条件や方法、フォーカスの変更手段や順序などを定義してもかまいません。例えば、ある場合はポインタ移動でフォーカスを得たり、他の場合はクリックが必要だったりします。フォーカスできない要素や、クリックのみでフォーカスできTabキーではできない要素もあり得ます。ドキュメントは複数のフォーカスリングを持つ場合もあり、他仕様でより複雑なフォーカスモデル(複数要素が同時にフォーカスを持つ等)が定義されることもあります。

3.3.4. フォーカスイベント型

フォーカスイベント型を以下に示します。

3.3.4.1. blur
種別 blur
インターフェース FocusEvent
同期 / 非同期 同期
バブリング いいえ
信頼済みターゲット Window, Element
キャンセル可能 いいえ
合成可 はい
デフォルトアクション なし
コンテキスト
(信頼済みイベント)

ユーザーエージェントは、イベントターゲットがフォーカスを失った時、このイベントを送信しなければなりません。フォーカスはこのイベントタイプの送信前に要素から外されなければなりません。このイベントタイプはfocusoutと似ていますが、バブリングしません。

3.3.4.2. focus
種別 focus
インターフェース FocusEvent
同期 / 非同期 同期
バブリング いいえ
信頼済みターゲット Window, Element
キャンセル可能 いいえ
合成可 はい
デフォルトアクション なし
コンテキスト
(信頼済みイベント)

ユーザーエージェントは、イベントターゲットがフォーカスを受け取った時、このイベントを送信しなければなりません。フォーカスはこのイベントタイプの送信前に要素へ与えられなければなりません。このイベントタイプはfocusinと似ていますが、バブリングしません。

3.3.4.3. focusin
種別 focusin
インターフェース FocusEvent
同期 / 非同期 同期
バブリング はい
信頼済みターゲット Window, Element
キャンセル可能 いいえ
合成可 はい
デフォルトアクション なし
コンテキスト
(信頼済みイベント)

ユーザーエージェントは、イベントターゲット がフォーカスを受け取った時、このイベントを送信しなければなりません。イベントターゲットは、フォーカスを受け取った要素でなければなりません。focusイベントは、このイベントタイプの送信前に発生しなければなりません。このイベントタイプはfocusと似ていますが、バブリングします。

3.3.4.4. focusout
種別 focusout
インターフェース FocusEvent
同期 / 非同期 同期
バブリング はい
信頼済みターゲット Window, Element
キャンセル可能 いいえ
合成可 はい
デフォルトアクション なし
コンテキスト
(信頼済みイベント)

ユーザーエージェントは、イベントターゲット がフォーカスを失った時、このイベントを送信しなければなりません。イベントターゲットは、フォーカスを失った要素でなければなりません。blurイベントは、このイベントタイプの送信前に発生しなければなりません。このイベントタイプはblur と似ていますが、バブリングします。

3.4. 入力イベント

入力イベントは、DOM がユーザーの操作(例: 編集可能領域でのキーボード入力、テキストの削除や書式設定など)の直接の結果として更新されている(またはこれから更新されようとしている)際に通知として送信されます。

3.4.1. インターフェース InputEvent

3.4.1.1. InputEvent

DOM Level 3 で導入

[Exposed=Window]
interface InputEvent : UIEvent {
  constructor(DOMString type, optional InputEventInit eventInitDict = {});
  readonly attribute USVString? data;
  readonly attribute boolean isComposing;
  readonly attribute DOMString inputType;
};
data, of type USVString, readonly, nullable
data は入力方式(input method)によって生成された文字の値を保持します。これは単一の Unicode 文字、または空でない Unicode 文字列の列である場合があります [Unicode]。文字は [UAX15] に定義された Unicode 正規化形式 NFC に従って正規化されるべきです。 この属性は 空文字列 を含むことがあります。

未初期化値null でなければなりません。

isComposing, of type boolean, readonly
true は、入力イベントが合成セッションの一部として発生している場合、すなわち対応する compositionstart イベントの後で、対応する compositionend イベントの前であることを示します。

未初期化値false でなければなりません。

inputType, of type DOMString, readonly
inputType はイベントに関連付けられた入力の種類を識別する文字列を含みます。

この属性の有効な値の一覧については、[Input-Events] 仕様を参照してください。

未初期化値 は空文字列 "" でなければなりません。

3.4.1.2. InputEventInit
dictionary InputEventInit : UIEventInit {
  DOMString? data = null;
  boolean isComposing = false;
  DOMString inputType = "";
};
data, of type DOMString, nullable, defaulting to null
InputEvent オブジェクトの data 属性を初期化します。
isComposing, of type boolean, defaulting to false
InputEvent オブジェクトの isComposing 属性を初期化します。
inputType, of type DOMString, defaulting to ""
InputEvent オブジェクトの inputType 属性を初期化します。

3.4.2. 入力イベントの順序

この仕様で定義される入力イベントは、互いに対して一定の順序で発生しなければなりません。

イベントタイプ 注記
1 beforeinput
DOM 要素が更新される
2 input

3.4.3. 入力イベントの種類

3.4.3.1. beforeinput
種別 beforeinput
インターフェース InputEvent
同期 / 非同期 同期
バブリング はい
信頼済みターゲット Element(具体的には HTMLInputElement のようなコントロール型など)または contenteditable 属性が有効な任意の Element
キャンセル可能 はい
合成可 はい
デフォルト動作 DOM 要素を更新する
コンテキスト
(信頼済みイベント)

ユーザーエージェントは、DOM がこれから更新されようとしているときにこのイベントを送信しなければなりません。

3.4.3.2. input
種別 input
インターフェース InputEvent
同期 / 非同期 同期
バブリング はい
信頼済みターゲット Element(具体的には HTMLInputElement のようなコントロール型など)または contenteditable 属性が有効な任意の Element
キャンセル可能 いいえ
合成可 はい
デフォルト動作 なし
コンテキスト
(信頼済みイベント)

ユーザーエージェントは、DOM が更新された直後にこのイベントを送信しなければなりません。

3.5. キーボードイベント

キーボードイベントはデバイス依存であり、入力デバイスの機能やそれらがオペレーティングシステム上でどのようにマッピングされているかに依存します。詳細や、キーボードイベントが合成イベント(Composition Events)と組み合わせてどのように使用されるかの例については Keyboard events and key values を参照してください。文字生成デバイスによっては、キーボードイベントが生成されないことがあります。

キーボードイベントは文字入力を提供する一つのモダリティに過ぎません。編集シナリオでは、キーボードイベントの代替(または併用)として InputEvent の使用も検討してください。

3.5.1. インターフェース KeyboardEvent

この仕様で導入

The KeyboardEvent インターフェースは、キーボードデバイスに関連する特定の文脈情報を提供します。各キーボードイベントは値を使ってキーを参照します。キーボードイベントは通常、フォーカスを持つ要素に向けられます。

The KeyboardEvent インターフェースは、幾つかの一般的な修飾キーのための便利な属性を提供します: ctrlKey, shiftKey, altKey, metaKey. これらの属性は、それぞれ getModifierState() メソッドを ControlShiftAlt、または Meta と共に使用するのと同等です。

インスタンスを作成するには KeyboardEvent コンストラクタを使用し、オプションの KeyboardEventInit 辞書を渡します。

3.5.1.1. KeyboardEvent
[Exposed=Window]
interface KeyboardEvent : UIEvent {
  constructor(DOMString type, optional KeyboardEventInit eventInitDict = {});
  // KeyLocationCode
  const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;
  const unsigned long DOM_KEY_LOCATION_LEFT = 0x01;
  const unsigned long DOM_KEY_LOCATION_RIGHT = 0x02;
  const unsigned long DOM_KEY_LOCATION_NUMPAD = 0x03;

  readonly attribute DOMString key;
  readonly attribute DOMString code;
  readonly attribute unsigned long location;

  readonly attribute boolean ctrlKey;
  readonly attribute boolean shiftKey;
  readonly attribute boolean altKey;
  readonly attribute boolean metaKey;

  readonly attribute boolean repeat;
  readonly attribute boolean isComposing;

  boolean getModifierState(DOMString keyArg);
};
DOM_KEY_LOCATION_STANDARD
キーのアクティベーションは左キーか右キーかを区別すべきではなく、(NumLock キーを除き)テンキー由来ではないことを示します。

PC 101 キー US 配列での Q キー。
PC 101 キー US 配列での NumLock キー。
PC 101 キー US 配列でキーボードの主要部にある 1 キー。

DOM_KEY_LOCATION_LEFT
キーのアクティベーションが左側のキー位置から発生したことを示します(当該キーに複数の位置がある場合)。

PC 101 キー US 配列での左側の Control キー。

DOM_KEY_LOCATION_RIGHT
キーのアクティベーションが右側のキー位置から発生したことを示します(当該キーに複数の位置がある場合)。

PC 101 キー US 配列での右側の Shift キー。

DOM_KEY_LOCATION_NUMPAD
キーのアクティベーションがテンキー上で発生したこと、またはテンキーに対応する仮想キーから発生したことを示します(当該キーに複数の位置がある場合)。なお、NumLock キーは常に location として DOM_KEY_LOCATION_STANDARD を用いるべきです。

PC 101 キー US 配列でテンキー上にある 1 キー。

key, of type DOMString, readonly
key は押されたキーに対応する key attribute value を保持します。

key 属性はレガシーな keyCode 属性とは関連しておらず、同じ値の集合ではありません。

未初期化値 は空文字列 "" でなければなりません。

code, of type DOMString, readonly
code は押された物理キーを識別する文字列を保持します。この値は現在のキーボード配列や修飾状態に影響されないため、特定のキーは常に同じ値を返します。

未初期化値 は空文字列 "" でなければなりません。

location, of type unsigned long, readonly
location 属性はデバイス上のキーの論理的な位置に関する指示を含みます。

この属性はデバイス上のキー位置を示すために DOM_KEY_LOCATION 定数のいずれかに設定されなければなりません。

もし ユーザーエージェント がキーの再割り当てを許可する場合、再割り当てされたキーの location 値は新しいキーに適切な値に設定されなければなりません。例えば、"ControlLeft" キーが "KeyQ" キーにマップされた場合、location 属性は DOM_KEY_LOCATION_STANDARD に設定されなければなりません。逆に、"KeyQ" キーが Control キーのいずれかにマップされた場合、location 属性は DOM_KEY_LOCATION_LEFT または DOM_KEY_LOCATION_RIGHT のいずれかに設定されなければなりません。

未初期化値0 でなければなりません。

ctrlKey, of type boolean, readonly
trueControl(コントロール)修飾キーが有効であったことを示します。

未初期化値false でなければなりません。

shiftKey, of type boolean, readonly
trueShift 修飾キーが有効であったことを示します。

未初期化値false でなければなりません。

altKey, of type boolean, readonly
trueAlt(または "Option") 修飾キーが有効であったことを示します。

未初期化値false でなければなりません。

metaKey, of type boolean, readonly
trueMeta 修飾キーが有効であったことを示します。

Macintosh システムでの "Command""⌘")キー修飾はこの修飾キーで表されます。

未初期化値false でなければなりません。

repeat, of type boolean, readonly
true はキーが持続的に押されている場合を示します。キーを押し続けると、システム設定により決定される速度で keydownbeforeinputinput の各イベントがこの順序で繰り返されるべきです。スクリーン上のソフトウェアキーボードなど長押し動作(long-key-press)を持つモバイル機器では、最初に repeat 属性値が true のキーイベントが long-key-press の指標として扱われなければなりません。繰り返しが開始されるまでの時間は構成依存です。

未初期化値false でなければなりません。

isComposing, of type boolean, readonly
true はキーイベントが合成セッションの一部として発生している場合、すなわち compositionstart の後で対応する compositionend の前であることを示します。

未初期化値false でなければなりません。

getModifierState(keyArg)
修飾キーの状態をキー値を用いて照会します。

それが修飾キーであり、かつ修飾が有効であれば true、そうでなければ false を返します。

DOMString keyArg
修飾キーの値。妥当な 修飾キーModifier Keys table[UIEvents-Key])に定義されています。

アプリケーションが右側と左側の修飾キーを区別したい場合、この情報はキーボードイベントと location を用いて推測できます。

3.5.1.2. KeyboardEventInit
dictionary KeyboardEventInit : EventModifierInit {
  DOMString key = "";
  DOMString code = "";
  unsigned long location = 0;
  boolean repeat = false;
  boolean isComposing = false;
};
key, of type DOMString, defaulting to ""
KeyboardEvent オブジェクトの key 属性を初期化します。これはすべてのキーボード修飾(シフト状態など)を考慮した後のキーの意味を表す Unicode 文字列です。キーが印字可能な文字でない場合は、[UIEvents-Key] に定義されたキー値の一つであるべきです。
code, of type DOMString, defaulting to ""
KeyboardEvent オブジェクトの code 属性を初期化します。これはキーボード配列などの修飾を無視して押されたキーを表す文字列で、[UIEvents-Code] に定義されたコード値の一つであるべきです。
location, of type unsigned long, defaulting to 0
KeyboardEvent オブジェクトの location 属性を以下の数値定数のいずれかに初期化します:
repeat, of type boolean, defaulting to false
KeyboardEvent オブジェクトの repeat 属性を初期化します。現在の KeyboardEvent が長押しによって引き起こされる繰り返し系列の一部と見なされる場合は true、そうでなければ false を設定してください。
isComposing, of type boolean, defaulting to false
KeyboardEvent オブジェクトの isComposing 属性を初期化します。この属性は、構築中のイベントが合成シーケンスの一部である場合に true に設定してください。そうでなければ false にします。
旧来のキーボードイベント実装には、追加の属性 keyCodecharCode、および which が含まれていました。 keyCode 属性はコンピュータキーボード上の特定のキーに対応する数値を示し、charCode 属性はそのキーに対応する文字の ASCII 値を示します(これは keyCode と同じである場合があります)。charCode は文字値を生成するキーにのみ適用されます。

実際には、keyCodecharCode はプラットフォーム間や同一実装の異なる OS やロケールで一貫していません。本仕様は keyCodecharCode の値や charCode の動作を定義しません。適合する UI Events 実装では、コンテンツ作者は代わりに keycode を使用できます。

詳細は、情報付録「Legacy key attributes」を参照してください。

既存コンテンツとの互換性のため、画面上のソフトウェアキーボードのような仮想キーボードは、物理キーを持たなくとも通常の範囲のキーボードイベントを生成することが期待されます。

一部の実装やシステム構成では、使用中の IME によって一部のキーイベントやその値が抑制されることがあります。

3.5.2. キーボードイベントのキー位置

The location 属性は、キーボード上の異なる物理キーから生成され得る key 値を区別するために使用できます。例えば、左右の Shift キーや物理的な矢印キーとテンキーの矢印キー(NumLock がオフのとき)などです。

次の表は、キーボード上で複数の位置を持つ特殊なキーに対する有効な location 値を定義します:

KeyboardEvent . key 有効な location
"Shift", "Control", "Alt", "Meta" DOM_KEY_LOCATION_LEFT, DOM_KEY_LOCATION_RIGHT
"ArrowDown", "ArrowLeft", "ArrowRight", "ArrowUp" DOM_KEY_LOCATION_STANDARD, DOM_KEY_LOCATION_NUMPAD
"End", "Home", "PageDown", "PageUp" DOM_KEY_LOCATION_STANDARD, DOM_KEY_LOCATION_NUMPAD
"0", "1", "2", "2", "4", "5", "6", "7", "8", "9", ".", "Enter", "+", "-", "*", "/" DOM_KEY_LOCATION_STANDARD, DOM_KEY_LOCATION_NUMPAD

この表に含まれていないその他すべてのキーについては、 location 属性は常に DOM_KEY_LOCATION_STANDARD に設定されなければなりません。

3.5.3. イベント修飾子初期化

The MouseEventKeyboardEvent インターフェイスは一連のキーボード修飾子属性を共有し、追加の修飾子状態を取得する仕組みをサポートします。次の辞書は著者が MouseEvent および KeyboardEvent インターフェイスのキーボード修飾子属性や、getModifierState() を通じて問い合わせられる追加の修飾子状態を初期化できるようにします。辞書を用いてマウスイベントを構築する手順は [pointerevents4] 仕様で定義されています。

dictionary EventModifierInit : UIEventInit {
  boolean ctrlKey = false;
  boolean shiftKey = false;
  boolean altKey = false;
  boolean metaKey = false;

  boolean modifierAltGraph = false;
  boolean modifierCapsLock = false;
  boolean modifierFn = false;
  boolean modifierFnLock = false;
  boolean modifierHyper = false;
  boolean modifierNumLock = false;
  boolean modifierScrollLock = false;
  boolean modifierSuper = false;
  boolean modifierSymbol = false;
  boolean modifierSymbolLock = false;
};
ctrlKey, of type boolean, defaulting to false

MouseEvent または KeyboardEvent オブジェクトの ctrlKey 属性を、Control キー 修飾子が有効と見なされる場合は true、そうでない場合は false に初期化します。

値が true の場合、実装はイベントオブジェクトのキー修飾子状態も初期化し、getModifierState() または getModifierState()Control を渡した場合に true を返すようにしなければなりません。

shiftKey, of type boolean, defaulting to false

MouseEvent または KeyboardEvent オブジェクトの shiftKey 属性を、Shift キー修飾子が有効と見なされる場合は true、そうでない場合は false に初期化します。

値が true の場合、実装はイベントオブジェクトのキー修飾子状態も初期化し、getModifierState() または getModifierState()Shift を渡した場合に true を返すようにしなければなりません。

altKey, of type boolean, defaulting to false

MouseEvent または KeyboardEvent オブジェクトの altKey 属性を、Alt (または Option)キー修飾子が有効と見なされる場合は true、そうでない場合は false に初期化します。

値が true の場合、実装はイベントオブジェクトのキー修飾子状態も初期化し、getModifierState() または getModifierState()Alt を渡した場合に true を返すようにしなければなりません。

metaKey, of type boolean, defaulting to false

MouseEvent または KeyboardEvent オブジェクトの metaKey 属性を、Meta キー修飾子が有効と見なされる場合は true、そうでない場合は false に初期化します。

値が true の場合、実装はイベントオブジェクトのキー修飾子状態も初期化し、getModifierState() または getModifierState()Meta を渡した場合に true を返すようにしなければなりません。

modifierAltGraph, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()AltGraph を渡した場合に true を返すようにします。

modifierCapsLock, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()CapsLock を渡した場合に true を返すようにします。

modifierFn, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()Fn を渡した場合に true を返すようにします。

modifierFnLock, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()FnLock を渡した場合に true を返すようにします。

modifierHyper, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()Hyper を渡した場合に true を返すようにします。

modifierNumLock, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()NumLock を渡した場合に true を返すようにします。

modifierScrollLock, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()ScrollLock を渡した場合に true を返すようにします。

modifierSuper, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()Super を渡した場合に true を返すようにします。

modifierSymbol, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()Symbol を渡した場合に true を返すようにします。

modifierSymbolLock, of type boolean, defaulting to false

イベントオブジェクトのキー修飾子状態を初期化し、getModifierState() または getModifierState()SymbolLock を渡した場合に true を返すようにします。

3.5.4. KeyboardEvent のアルゴリズム

3.5.4.1. KeyboardEvent のグローバル状態
3.5.4.1.1. ユーザーエージェントレベルの状態

The UA must maintain the following values that are shared for the entire User Agent.

A key modifier state (initially empty) that keeps track of the current state of each modifier key available on the system.

3.5.5. キーボードイベントの順序

この仕様で定義されたキーボードイベントは、任意のキーについて互いに対して定められた順序で発生します:

イベントタイプ 注記
1 keydown
2 beforeinput (文字値を生成するキーの場合のみ)
このキーに関連する任意のデフォルト動作(例えば DOM への文字の挿入など)。
3 input (DOM を更新したキーの場合のみ)
長押しによるイベント(下述)に関する任意のイベント。
4 keyup

If the key is depressed for a sustained period, the following events MAY repeat at an environment-dependent rate:

イベントタイプ 注記
1 keydown repeat 属性が true に設定されている場合)
2 beforeinput (文字値を生成するキーの場合のみ)
このキーに関連する任意のデフォルト動作(例えば DOM への文字の挿入など)。
3 input (DOM を更新したキーの場合のみ)

通常、特定のキーに関連付けられた任意のデフォルト動作は default actionskeyup イベントが発火される前に完了します。これにより keyup イベントがわずかに遅延することがあります(ただし知覚できるほどの遅延になることはほとんどありません)。

キーイベントの event target は、現在入力がフォーカスされていてキーボード操作を処理している要素です。これは通常、HTMLの input 要素や編集可能なテキスト要素ですが、 ホスト言語 により定義された、非テキスト用途のキーボード入力(アクセラレータキーの有効化やその他の動作トリガーなど)を受け付ける要素の場合もあります。適切な要素がフォーカスされていない場合、event target は利用可能であればHTML body要素、そうでなければroot要素になります。

event target は異なるキーボードイベント間で変化することがあります。 例えば、Tabキーのkeydownイベントと 同じキー操作のkeyupイベントでは event target が異なることがあります。

3.5.6. キーボードイベントタイプ

3.5.6.1. keydown
タイプ keydown
インターフェイス KeyboardEvent
同期 / 非同期 同期
バブル はい
信頼できるターゲット Element
キャンセル可能 はい
合成 はい
デフォルトアクション 可変: beforeinputinput イベント; テキスト合成システムの起動; blurfocus イベント; keypress イベント(サポートされている場合); アクティベーション動作; その他イベント
コンテキスト
(trusted events)

ユーザーエージェントは、キーが押されているときにこのイベントを発火しなければなりません。 keydown イベントタイプはデバイス依存であり、 入力デバイスの能力やOSでのマッピングに依存します。このイベントタイプは キー割り当ての後で生成されなければなりません。またこのイベントタイプは 同じキーに関連する beforeinput, input, keyup イベントより前に発火されなければなりません。

keydown イベントのデフォルトアクションはキーによって異なります:

このイベントがキャンセルされた場合、関連するイベントタイプは発火されず、関連アクションも実行されません。

keydown および keyup イベントは伝統的に 文字値を生成するキーに限定されず、任意のキー検出と関連付けられています。

3.5.6.2. keyup
タイプ keyup
インターフェイス KeyboardEvent
同期 / 非同期 同期
バブル はい
信頼できるターゲット Element
キャンセル可能 はい
合成 はい
デフォルトアクション なし
コンテキスト
(trusted events)

ユーザーエージェントは、キーが離されたときにこのイベントを発火しなければなりません。 keyup イベントタイプはデバイス依存であり、 入力デバイスの能力やOSでのマッピングに依存します。このイベントタイプは キー割り当ての後で生成されなければなりません。またこのイベントタイプは 同じキーに関連する keydown, beforeinput, input イベントより後に発火されなければなりません。

keydown および keyup イベントは伝統的に 文字値を生成するキーに限定されず、任意のキー検出と関連付けられています。

3.6. 合成イベント

合成イベントは、キーボードイベント以外の補助的または代替的な入力手段を提供し、 キーボード上では一般的に利用できない文字を使えるようにします。例えば合成イベントは、 標準の米国キーボードにない発音記号を文字へ付加したり、多くのアジア言語における表意文字を 基本部品やカテゴリから組み立てたり、モバイルデバイスのキーボードで複数のキー操作を組み合わせて 単語を選択したり、音声認識プロセッサを使って音声指令をテキストへ変換したりする用途に使われます。 合成イベントがキーボードイベントと組み合わせてどのように使用されるかの例は § 4 キーボードイベントとキー値 を参照してください。

概念的に、合成セッションは1つのcompositionstart イベント、1つ以上のcompositionupdateイベント、そして1つの compositionendイベントからなり、各セッション期間中、このイベントチェーンの各段階間でdata 属性の値が持続される。

注記: 合成セッションがアクティブな間、キーボードが入力デバイスとして使われる場合には、 キーボードイベントがDOMに発火される可能性があります。 詳しくは compositionstart イベントの詳細や IME セクション のイベント順序をご覧ください。

すべてのIMEシステムやデバイスが必要なデータをDOMに公開するとは限らないため、 アクティブな合成文字列(「読みウィンドウ」や「候補選択メニューオプション」)は このインターフェイス経由で利用できない場合があり、その場合選択は 空文字列で表現されることがあります。

3.6.1. インターフェイス CompositionEvent

この仕様で導入

CompositionEvent インターフェイスは、合成イベントに関連する 特定のコンテキスト情報を提供します。

CompositionEvent インターフェイスのインスタンスを作成するには、 オプションの CompositionEventInit 辞書を渡して CompositionEvent コンストラクタを使用してください。

3.6.1.1. CompositionEvent(合成イベント)
[Exposed=Window]
interface CompositionEvent : UIEvent {
  constructor(DOMString type, optional CompositionEventInit eventInitDict = {});
  readonly attribute USVString data;
};
data, USVString(読み取り専用)
data は、入力方式によって生成された文字値を保持します。これは単一のユニコード文字または 非空のユニコード文字列となる場合があります [Unicode]。 文字列は Unicode 正規化形式 NFC[UAX15])に従い正規化されるべきです。 また、この属性は空文字列となることもあります。

この属性値の未初期化値""(空文字列)です。

3.6.1.2. CompositionEventInit(合成イベント初期化)
dictionary CompositionEventInit : UIEventInit {
  DOMString data = "";
};
data, DOMString(初期値は ""
CompositionEvent オブジェクトの data 属性を IME 合成で生成された文字値で初期化します。

3.6.2. 合成イベント順序

この仕様で定義された合成イベントは、互いに対して次のセット順序で発生しなければなりません:

イベントタイプ 注記
1 compositionstart
2 compositionupdate 複数イベント
3 compositionend

3.6.3. 手書き認識システム

以下は、筆でタブレット上に「text」という文章を手書き認識システムで合成する場合のイベントシーケンス例です(合成イベントとしてモデル化)。

イベントタイプ CompositionEvent
data
注記
1 compositionstart ""
ユーザーがタブレット表面に単語を書く
2 compositionupdate "test"
ユーザーが最初の単語候補を却下し、別の候補を選択
3 compositionupdate "text"
4 compositionend "text"

3.6.4. 合成イベントのキャンセル

keydown イベントがキャンセルされた場合、 その keydown により発火されるはずの合成イベントは 発火されないべきです:

イベントタイプ 注記
1 keydown デフォルト動作が阻止される(例:preventDefault() を呼び出す)
合成イベントは発火されない
2 keyup

最初の compositionstart イベントがキャンセルされた場合、 テキスト合成セッションは終了すべきです。合成セッションが終了するかどうかに関わらず、 compositionend イベントは必ず送信されなければなりません。

イベントタイプ 注記
1 keydown
2 compositionstart デフォルト動作が阻止される(例:preventDefault() を呼び出す)
合成イベントは発火されない
3 compositionend
4 keyup

3.6.5. 合成中のキーイベント

合成セッション中は keydownkeyup イベントは引き続き送信され、 これらは isComposing 属性を true に設定した状態で発火されなければなりません。

イベントタイプ KeyboardEvent
isComposing
注記
1 keydown false 合成を開始するキーイベント
2 compositionstart
3 compositionupdate
4 keyup true
... 合成セッション中に送信されるキーイベントは isComposingtrue に設定する必要がある
5 keydown true 合成を終了するキーイベント
6 compositionend
7 keyup false

3.6.6. 合成中の入力イベント

合成セッション中は、compositionupdate イベントは beforeinput の後、そして input イベントの前に発火されなければなりません。

イベントタイプ 注記
1 beforeinput
2 compositionupdate
この時点で DOM 更新が行われる
3 input

多くの IME は合成セッション中の更新キャンセルをサポートしません。

beforeinput および input イベントは DOMが合成の一部として更新された都度、compositionupdate イベントとともに送信されます。 compositionend イベントには DOM 更新が伴わないため、 beforeinputinput イベントは送信すべきではありません。

イベントタイプ 注記
1 beforeinput これをキャンセルすると DOM 更新および input イベントを阻止する
2 compositionupdate
この時点で DOM 更新が行われる
3 input DOM が更新された場合のみ送信
4 compositionend

3.6.7. 合成イベントタイプ

3.6.7.1. compositionstart
タイプ compositionstart
インターフェイス CompositionEvent
同期 / 非同期 同期
バブル はい
信頼できるターゲット Element
キャンセル可能 はい
合成 はい
デフォルトアクション テキスト合成システムが有効化されたとき、新しい合成セッションを開始
コンテキスト
(trusted events)

ある ユーザー エージェント MUST このイベントを送出しなければならない場合は、テキスト 合成システムが有効になっており、新しい合成セッションが 開始されようとしている(または既に開始されている場合がある、テキスト合成 システムに応じて)テキストの一節を作成する準備として。これは イベントの種類はデバイス依存であり、テキスト変換システムの能力やそれが オペレーティングシステムにどのようにマッピングされているかに依存してもよい(MAY)。キーボードが入力方式エディタに入力を渡すために使用される場合、このイベントの種類はkeydownイベントの後に生成されるが、 音声認識や手書き認識システムはキーボードイベントなしでこのイベント の種類を送信してもよい(MAY)。いくつかの実装はdata 属性をcompositionstart イベントに対して、文書で現在選択されているテキスト(編集および置換のため)で 埋めることがある(MAY)。そうでない場合、data 属性の値は 空 文字列 でなければならない(MUST)。

このイベントはテキスト合成システムが新しい合成セッションを始める直前、および合成プロセスによる DOM の修正前に必ず発火されなければなりません。 このイベントのデフォルトアクションはテキスト合成システムによる新しい合成セッションの開始です。 このイベントがキャンセルされた場合は テキスト合成システムは 現在の合成セッションを破棄するべきです。

compositionstart イベントタイプのキャンセルは、 テキスト合成システムそのもののキャンセル (例:キャンセルボタンを押す、IME ウィンドウを閉じるなど)とは異なります。

一部のIMEは進行中の合成セッションのキャンセル(例:GTK等、現時点でそのAPIがない)をサポートしません。 この場合 preventDefault() を呼び出しても本イベントのデフォルト動作は止まりません。

3.6.7.2. compositionupdate
タイプ compositionupdate
インターフェイス CompositionEvent
同期 / 非同期 同期
バブル はい
信頼できるターゲット Element
キャンセル可能 いいえ
合成 はい
デフォルトアクション なし
コンテキスト
(trusted events)

ユーザーエージェントは 合成セッション中に テキスト合成システムがアクティブテキストに新しい文字を追加した際、 このイベントを発火するべきです。その結果は data に反映されます。

テキスト合成システムで 入力制御と進行中の合成内容を同期させる場合、compositionupdate イベントは制御が更新される前に発火されなければなりません。

テキスト合成システムによっては この情報をDOMに開示しない場合もあり、その場合合成処理中に本イベントは発火されません。

合成セッションがキャンセルされた場合、このイベントは compositionend イベントの直前に発火され、 data 属性値は空文字列になります。

3.6.7.3. compositionend
タイプ compositionend
インターフェイス CompositionEvent
同期 / 非同期 同期
バブル はい
信頼できるターゲット Element
キャンセル可能 いいえ
合成 はい
デフォルトアクション なし
コンテキスト
(trusted events)

ユーザーエージェントテキスト合成システムが現在の合成セッションを完了またはキャンセルした時、 compositionend イベントを発火しなければなりません。 またコントロール更新後に発火しなければなりません。

このイベントは テキスト合成システムが合成セッションを完了した直後 (例:IME が閉じられる、最小化される、フォーカスが失われるなどで フォーカスがユーザーエージェントに戻る)に必ず発火されます。

4. キーボードイベントとキー値

このセクションではキーボードイベントに関する必要な情報を示します:

このセクションではセルビア語や漢字文字を使用しています。PDF版や印刷版の現行標準では文字が正しく表示されない場合があります。

4.1. キーボード入力

このセクションは非規範的です

各キーとキーボード全体との関係は、以下の3つの側面から成り立ち、モデルや構成(特にロケール固有の場合)によって異なります:

この現行標準では、key値とcode値に関する機能的マッピングのみ定義し、キーのレジェンドについては簡単な説明のみです。

4.1.1. キーのレジェンド

このセクションは参考情報です

キーのレジェンドは、キーキャップ(物理キーの長方形の「キャップ」部分)に印刷または刻印されている視覚的マークです。通常は、キー操作で生成される文字("G""8""ш"など)や、そのキーの機能を示す記号や名称(上向き矢印"⇧"Shift、文字列"Enter"など)で構成されます。キーはこのマーキングで呼ばれることが多いです(例:「"Shift"キーと"G"キーを押してください」)。ただし、キーの見た目はデジタル表現に影響せず、多くの構成では見た目が完全に不正確な場合もあります。Enterなどのコントロール・ファンクションキーも、異なる機能や文字キーにマッピングされる場合があります。

多くのキーボードには通常文字を生成しないキーがあります(記号にUnicodeの対応があっても)。例えばShiftキーは"⇧"(UnicodeコードポイントU+21E7)の記号を持つ場合がありますが、Shiftキーを押してもこの文字値は生成されません。またShift自体にUnicodeコードポイントはありません。

4.2. キーコード

キーcode は、キーボードイベントに関連付けられた物理キーを識別する属性です。USB Usage IDに似ており、ベンダー非依存の低レベル値(スキャンコード類似)を提供します。

code 属性の主な目的は、物理位置に基づいてキーを一貫して識別する手段を提供することです。また、現在のキーボード状態に左右されない安定したキー名(各物理キーを一意に識別する)も提供します。

有効なcode 値の一覧は[UIEvents-Code]で定義されています。

4.2.1. code 属性の動機

標準PCキーボードには、ユーザーが選択した現在のキーボードレイアウトにより異なるkey 値を生成するキー(書記体系キー)があります。この状況では、物理位置に基づいてキーを検出するコードを書くのが困難です。現在どのレイアウトか把握して、どのkey 値を確認すべきか知る必要があるためです。実例:ゲームで"W""A""S""D"キーでプレイヤー移動を制御したい場合。code 属性なら、現在のキーボードレイアウトに影響されず安定した値で判定できます。

さらにkey 属性の値も現在のキーボード状態に依存します。修飾キーとの押下・解放順によってkey 属性に格納される値が変わります。code 属性は現在のキーボード状態に影響されない安定した値を提供します。

4.2.2. keycodeの関係

key
key 属性は、現在のキーボードレイアウト(IMEも含む。デッドキーは固有のkey 値を持つ)を考慮したキーの意味を判定したい場合に使います。ユースケース例:修飾キー付きや修飾キー単体の検出(例:キーボードショートカットに反応するアクション)。
code
code 属性は、レイアウト変更無しでユーザーが押した物理キー自体を判定したい場合に使います。ユースケース例:WASDキー(ゲームの移動制御)やすべてのキーキャッチ(リモートデスクトップクライアントなど)。

4.2.3. codeの例

左右Altキーの取扱い
キーボード配列 KeyboardEvent
key
KeyboardEvent
code
注記
US "Alt" "AltLeft" DOM_KEY_LOCATION_LEFT
French "Alt" "AltLeft" DOM_KEY_LOCATION_LEFT
US "Alt" "AltRight" DOM_KEY_LOCATION_RIGHT
French "AltGraph" "AltRight" DOM_KEY_LOCATION_RIGHT

この例では、key 属性をチェックすることで どちらのAltキー(左・右)が押されたかを気にせず Alt にマッチできます。 code 属性をチェックすると どの配列かに関わらず右Altキー("AltRight")を 正確に判別できます。

フランス配列の例では、AltAltGraph キーは 実際には1つしか存在しなくても、それぞれ左・右の位置を保持している点に注意してください。

シングルクオートキーの取扱い
キーボード配列 KeyboardEvent
key
KeyboardEvent
code
注記
US "'" "Quote"
Japanese ":" "Quote"
US Intl "Dead" "Quote"

この例はデッドキー値が属性にどのようにエンコードされるかを示しています。 key の値は 現在のロケールによって変化しますが、code 属性は 一貫性のある値を返します。

"2" キー(Shift有・無)の各種キーボード配列での取扱い
キーボード配列 KeyboardEvent
key
KeyboardEvent
code
注記
US "2" "Digit2"
US "@" "Digit2" shiftKey
UK "2" "Digit2"
UK """ "Digit2" shiftKey
French "é" "Digit2"
French "2" "Digit2" shiftKey

現在のロケールや修飾キー状態に関わらず、USキーボードで "2" とラベルされたキーを押すと、 "Digit2"code 属性に必ず記録されます。

キーボードイベント列 : Shift2

次の2つのキーイベント列で属性値を比較してください。 USキーボードでは両方とも "@" 文字を生成しますが、キーが離される順序が異なります。 最初の列では順序は:Shift(押下), 2 (押下), 2(離す), Shift(離す)です。

イベントタイプ KeyboardEvent
key
KeyboardEvent
code
注記
1 keydown "Shift" "ShiftLeft" DOM_KEY_LOCATION_LEFT
2 keydown "@" "Digit2" shiftKey
3 keypress "@" "Digit2" (サポートされている場合)
4 keyup "@" "Digit2" shiftKey
5 keyup "Shift" "ShiftLeft" DOM_KEY_LOCATION_LEFT

2番目の列では、Shiftキーが2より先に離されるため、順序は Shift(押下), 2(押下), Shift(離す), 2(離す) となります。

イベントタイプ KeyboardEvent
key
KeyboardEvent
code
注記
1 keydown "Shift" "ShiftLeft" DOM_KEY_LOCATION_LEFT
2 keydown "@" "Digit2" shiftKey
3 keypress "@" "Digit2" (サポートされている場合)
4 keyup "Shift" "ShiftLeft" DOM_KEY_LOCATION_LEFT
5 keyup "2" "Digit2"

key 属性に含まれる値は、"2" キーに関する keydownとkeyupイベント間で一致しません。 code 属性は現在の修飾キー状態に影響されず、常に一貫した値を提供します。

4.2.4. code と仮想キーボード

code 属性の有用性は、仮想キーボード(リモコンやコード入力型キーボードも含む)ではやや分かりづらい場合があります。一般的に、仮想(またはリモートコントロール)キーボードが標準キーボードのレイアウト・機能を模倣する場合は、適切にcode 属性も設定しなければなりません。標準キーボードのレイアウトを模倣しない場合は、code 属性を標準キーボード上の最も近い値に設定するか、未定義のままにしてもかまいません。

仮想キーボードで修飾状態に応じて異なる値を生成するキーの場合、code 値は端末が工場出荷時設定状態のときにボタンを押した場合に生成されるkey 値を基準にするべきです。

4.3. キーボードイベントkey

キー値は、DOMStringとして、位置や状態に関係なく、キーボード上の任意のキーをその値で示すことができます。これらのkey値は、実装によって生成されたキーボードイベントの返値や、コンテンツ著者が希望入力の指定(キーボードショートカット等)で使う入力値として用いることができます。

有効なkey値の一覧は[UIEvents-Key]で定義されています。

key値は、key 属性を用いて、押されたキーの値を検出するのに利用できます。コンテンツ著者は、アルファベットの大文字・小文字、数字、記号、その他文字生成キーの文字値や、制御キー・修飾キー・ファンクションキーなど文字を生成しないキーのkey値を取得できます。これらの値は、特定の入力文字列の監視、修飾キー入力と他の入力(マウス等)の組み合わせ検出・動作、仮想キーボードの作成、その他さまざまな用途に利用できます。

key値は、文字列比較や、マークアップ属性値(HTMLのaccesskeyなど)としても利用でき、他の関連用途にも使えます。準拠したホスト言語は、コンテンツ著者がキー値として2種類の等価な文字列値(文字値またはkey値)のいずれも使えるようにすべきです。

実装はプラットフォームやキーボードレイアウトマッピングに関係なく、最も妥当な値をキーごとに利用しますが、コンテンツ著者はキーボードデバイスがそれらの値を生成できるとは限らないことを前提にすべきです。ショートカットキー組み合わせでkey値を使う場合は「数字やファンクションキー(F4F5など)をアルファベットの代わりに使うことを検討してください」([DWW95])とされています。多くのレイアウトでそれらのキーは存在します。

key値は物理キーボード上の具体的なキーを示すものではなく、キーに印字された文字とも一致しません。key値は、現在の全ての有効キーと入力モード(シフトモード等)を考慮したイベントの値であり、キーボードのOSマッピングに従って実装に報告されます。つまり、QWERTYキーボードのOラベルのキーは、シフト無しで"o"、シフト付きで"O"となります。ユーザーはキーボードを任意のカスタム構成にマッピングできるため、著者はキーのシフト状態と文字表現(大文字・小文字)間の関係を前提とせず、key 属性の値だけを使うことが推奨されます。例えば、[UIEvents-Code]に示されたStandard「102」キーボードレイアウトは一例であり、他にも多数の標準・独自レイアウトが存在します。

デッドキー対応を簡略化するため、OSのキーボードマッピングでデッドキー状態を扱う場合、デッドキーシーケンスの現在状態はkey 属性では報告されません。代わりにkey値"Dead"が報告され、実装はデッドキーシーケンスの途中状態をdata 属性で持つ合成イベントを発生させます。前述の例のように、QWERTYキーボードのOラベルのキーは、デッドキー操作(ウムラウト付加)中に非シフトで"ö"、シフト時は"Ö"となります。

また、キーイベント状態とkey値の関係は1対1ではありません。特定のkey値を持つキーが複数存在する場合もあります。例:標準キーボードではShiftキー値を持つキーが複数あり(通常はlocationDOM_KEY_LOCATION_LEFTDOM_KEY_LOCATION_RIGHTで区別)、8キー値も複数あり(locationDOM_KEY_LOCATION_STANDARDDOM_KEY_LOCATION_NUMPADで区別)、ユーザー設定のカスタムレイアウトでは任意のkey値が複数状態に割り当てられる場合もあります(location は標準レイアウト向けなので必ずしも意味のある区別を示せません)。

最後に、文字表現の意味は文脈依存で複雑です。例えばアスタリスク(星型)記号"*"は、文中で脚注や強調(文章の囲み)を表したり、ドキュメントやプログラムによっては乗算演算子とみなされたり、他の文書やプログラムでは乗算記号("×"、Unicode値U+00D7)やラテン小文字"x"(多くのキーボードには乗算キーがなく、記号が似ているため)で表されることもあります。したがって、文字表現の意味や機能はこの現行標準の範囲外です。

4.3.1. 修飾キー

キーボード入力は修飾キーを用いてキーの通常の動作を変更します。 他のキーと同様に、修飾キーも下記例で示されるように keydown および keyup イベントを生成します。一部修飾キーは キーが押された/押し続けられている間に有効化されます(Alt, Control, Shift, AltGraph, Meta)。 他の修飾キーは状態によって有効化されます(CapsLock, NumLock, ScrollLock)。状態の変化は修飾キーが押される時に発生します。 KeyboardEvent インターフェイスはよく使われる修飾キーに便利な属性を提供します: ctrlKey, shiftKey, altKey, metaKey。 一部のOSはAltGraph修飾キーをAltControl の組み合わせで擬似的に実装しています。AltGraph修飾キーの直接利用が推奨されます。

この例は、US配列のキーボードでUSマッピングを用いて、 Unicode文字Q(ラテン大文字Q、Unicodeコードポイント U+0051)を生成するイベント列を示します:
イベントタイプ KeyboardEvent
key
修飾キー 注記
1 keydown "Shift" shiftKey
2 keydown "Q" shiftKey ラテン大文字Q
3 beforeinput
4 input
5 keyup "Q" shiftKey
6 keyup "Shift"
この例は、上記と異なり Shift キーが Q より先に離される場合のイベント列です。 Qキーの値は、keyup イベントではシフト無しの値になります:
イベントタイプ KeyboardEvent
key
修飾キー 注記
1 keydown "Shift" shiftKey
2 keydown "Q" shiftKey ラテン大文字Q
3 beforeinput
4 input
5 keyup "Shift"
6 keyup "q" ラテン小文字q
次の例は(前と同じ構成で)Unicode文字を生成しないキー列を示しています:
イベントタイプ KeyboardEvent
key
修飾キー 注記
1 keydown "Control" ctrlKey
2 keydown "v" ctrlKey ラテン小文字v
beforeinputinput イベントは発生しません。
3 keyup "v" ctrlKey ラテン小文字v
4 keyup "Control"
次の例は ShiftControl の両方を 押した場合のイベント列を示しています:
イベントタイプ KeyboardEvent
key
修飾キー 注記
1 keydown "Control" ctrlKey
2 keydown "Shift" ctrlKey, shiftKey
3 keydown "V" ctrlKey, shiftKey ラテン大文字V
beforeinputinput イベントは発生しません。
4 keyup "V" ctrlKey, shiftKey ラテン大文字V
5 keyup "Shift" ctrlKey
6 keyup "Control"
US以外のキーボード配列でもイベント列は同じですが、 key値は現在のキーボード配列に基づきます。この例はアラビア語キーボード配列使用時のイベント列です:
イベントタイプ KeyboardEvent
key
修飾キー 注記
1 keydown "Control" ctrlKey
2 keydown "ر" ctrlKey アラビア文字 Reh
beforeinputinput イベントは発生しません。
3 keyup "ر" ctrlKey アラビア文字 Reh
4 keyup "Control"

keydownkeyupイベントの値は、キー押下時の現在のキーボードレイアウトによって異なります。つまりUSレイアウトのvキーとアラビア語レイアウトのرキーは同じ物理キーでも異なるイベント値を生成します。同じ物理キーからのイベントを識別するにはcode 属性を使う必要があります。

一部の場合、修飾キーはキーイベントのkey 値を変更します。例えばMacOSキーボードでは「delete」ラベルのキーは未修飾時はWindowsと同じBackspaceキーとして動作しますが、Fn修飾時はDeleteキーとして動作し、key の値もその時の最適な機能に一致します。

4.3.2. デッドキー

一部のキーボード入力では、デッドキーを使って合成文字列を入力します。手書き入力と異なり、ユーザーはまずベース文字を入力するのではなく、デッドキーを押下して特殊状態に入り、限定された「正当な」ベース文字が入力された時のみ文字を出力します。

MacOSおよびLinuxのOSは入力メソッドでデッドキーを処理します。

すべてのキーボードレイアウト・マッピングにおけるデッドキーは、キー値Deadで表現されます。デッドキーを押下した際、ユーザーエージェントは合成イベントをディスパッチし、compositionupdateイベントのdata値は、デッドキー合成シーケンスの現在の文字値でなければなりません。

Unicode合成文字は常に手書き入力シーケンスの後に置かれ(合成文字が対応する文字の後ろに来る)、通常のデッドキー入力ではシーケンスが逆になる場合もあります(合成文字が対応する文字の前)。例えば、単語naïve(合成記号¨使用)は、Unicode上はnai¨veと順序付けされますが、入力時はna¨iveとなる場合もあります。キーストロークU+0302(合成サーカムフレックスアクセントキー)とU+0065(ラテン小文字eキー)をフランス語キーボードでフランス語マッピング・修飾なしで入力すると、Unicode文字"ê"(ラテン小文字eサーカムフレックス付)が生成され、Unicode正規化形式NFCが推奨する表現となります。

イベントタイプ KeyboardEvent
key
KeyboardEvent
isComposing
CompositionEvent
data
注記
1 keydown "Dead" false 合成サーカムフレックスアクセント(デッドキー)
2 compositionstart ""
3 compositionupdate U+0302
4 keyup "Dead" true
5 keydown "ê" true
6 compositionupdate "ê"
7 compositionend "ê"
8 keyup "e" false ラテン小文字e

2番目の keydown イベント(ステップ5)では、key値(イベントが抑制されていない場合)は 通常 "e"(ラテン小文字eキー)にはならないことに注意してください。なぜなら、 この時点でユーザーエージェントに渡される値は既にデッドキー操作によって変更されているからです。

このプロセスは、ユーザーが(デッドキー押下後に)サポートされていない基底文字(アクティブなダイアクリティカル記号が利用できないもの)をタイプした場合、中断されることがあります:

イベントタイプ KeyboardEvent
key
KeyboardEvent
isComposing
CompositionEvent
data
注記
1 keydown "Dead" false 合成サーカムフレックスアクセント(デッドキー)
2 compositionstart ""
3 compositionupdate U+0302
4 keyup "Dead" true
5 keydown "q" true ラテン小文字q
6 compositionupdate ""
7 compositionend ""
8 keyup "q" false

4.3.3. 入力メソッドエディタ

この現行標準は、入力メソッドエディタ(IME)のモデルをCompositionEvent インターフェースとイベントを通じて含みます。 ただし、合成イベントとキーボードイベントは必ずしも1対1で対応しません。例えば、keydownAcceptキー値を受け取っても、現在IMEで選択されているテキストが受理されたことを意味するわけではなく、単にキーストロークがあったことを示すだけです。IMEのAccept機能(多くのIMEではcompositionendイベントが発生)とは切り離されています。キーボードイベントだけでは入力メソッドエディタの現在状態は判断できません。状態はdata 属性(CompositionEvent インターフェース)で取得します。さらに、IMEシステムやデバイスは機能やキー割り当てが異なり、ConvertAcceptキーが他のキーで代用される場合もあります。キーボードイベントは、デバイスのキーボードレイアウトマッピング後に生成されるイベントに対応します。

一部の実装やシステム構成では、IMEによって一部のキーイベントや値が抑制される場合があります。

以下は、日本語入力方式を使ってUnicode文字"市"(漢字、CJK統合漢字)を生成するキーシーケンス例です。この例はIMEがアクティブで日本語ローマ字入力モードになっていることを前提とします。ConvertAcceptキーは、使用デバイスやIME構成により他のキーで代用される場合もあり(例:スペースキーU+0020Enter)。

"詩"(詩)と"市"(市)は同音異義語(いずれも「し」)のため、ユーザーはConvertキーで適切な候補を選択する必要があります。

イベントタイプ KeyboardEvent
key
KeyboardEvent
isComposing
CompositionEvent
data
備考
1 keydown "s" false ラテン小文字s
2 compositionstart ""
3 beforeinput
4 compositionupdate "s"
DOMが更新される
5 input
6 keyup "s" true
7 keydown "i" true ラテン小文字i
8 beforeinput
9 compositionupdate "し" shi
DOMが更新される
10 input
11 keyup "i" true
12 keydown "Convert" true 変換
13 beforeinput
14 compositionupdate "詩" 「詩」
DOMが更新される
15 input
16 keyup "Convert" true
17 keydown "Convert" true 変換
18 beforeinput
19 compositionupdate "市" 「市」
DOMが更新される
20 input
21 keyup "Convert" true
22 keydown "Accept" true 確定
23 compositionend "市"
24 keyup "Accept" false

IME合成は下記のようにキャンセルすることもできます(条件は前例と同じ)。Cancelキーも、使用デバイスやIME構成により他のキー(例:U+001B(Escキー))で代用される場合があります。

イベントタイプ KeyboardEvent
key
KeyboardEvent
isComposing
CompositionEvent
data
備考
1 keydown "s" false ラテン小文字s
2 compositionstart ""
3 compositionupdate "s"
4 keyup "s" true
5 keydown "i" true ラテン小文字i
6 compositionupdate "し" shi
7 keyup "i" true
8 keydown "Convert" true 変換
9 compositionupdate "詩" 「詩」
10 keyup "Convert" true
11 keydown "Convert" true 変換
12 compositionupdate "市" 「市」
13 keyup "Convert" true
14 keydown "Cancel" true キャンセル
15 compositionupdate ""
16 compositionend ""
17 keyup "Cancel" false

一部の入力メソッドエディタ(MacOSなど)は、合成キャンセル前に合成データ属性へ空文字列を設定する場合があります。

4.3.3.1. 入力メソッドエディタモードキー

一部デバイスのキーは入力メソッドエディタ機能の起動や、アクティブな入力メソッドエディタのモード変更を目的としています。この目的のためのカスタムキーは、デバイスや言語モードごとに定義できます。この現行標準でこの目的で定義されているキーは、"Alphanumeric""CodeInput""FinalMode""HangulMode""HanjaMode""Hiragana""JunjaMode""KanaMode""KanjiMode""Katakana""Romaji"です。これらのキーが押された時、IMEがアクティブでなければ、該当モードでIMEが起動することが期待されます(利用可能な場合)。すでにIMEがアクティブな場合は、IMEが指定モードに切り替わるか、別のIMEが起動するか、あるいは無視される場合もあり、機種やアプリケーションごとに異なります。

現行標準ではIME用の操作を意図した他のキーも定義されています:"Accept""AllCandidates""Cancel""Convert""Compose""Zenkaku" (全角)、"Hankaku" (半角)、"NextCandidate""NonConvert""PreviousCandidate"です。これらのキーの機能は現行標準では定義されていません。IME機能の詳細については他の資料を参照してください。

IME機能付きキーはその目的専用に限らず、デバイスや実装ごとに他用途でも使われる場合があります。

4.3.4. デフォルトアクションとキャンセル可能なキーボードイベント

keydown イベントの デフォルト動作 をキャンセルしても、対応する keyup イベントには影響しませんが、対応する beforeinputinput(および keypress がサポートされている場合)イベントの生成を防止する必要があります。次の例は、USキーボードでUSマッピングを使って Unicode文字Q(ラテン大文字Q)を生成する一連のキー操作を示しています。

イベントタイプ KeyboardEvent
key
InputEvent
data
修飾キー 注記
1 keydown "Shift" shiftKey
2 keydown "Q" shiftKey デフォルト動作が阻止される(例:preventDefault() を呼び出す)
beforeinputinput (および keypressがサポートされていれば)イベントは生成されません
3 keyup "Q" shiftKey
4 keyup "Shift"

キーが修飾キーの場合でも、キーストロークは修飾キー状態の計算に必ず考慮されます。次の例もUSマッピングで ラテン大文字Q を生成する一連の操作です。

イベントタイプ KeyboardEvent
key
InputEvent
data
修飾キー 注記
1 keydown "Shift" shiftKey デフォルト動作が阻止される(例:preventDefault() を呼び出す)
2 keydown "Q" shiftKey
3 beforeinput "Q"
4 input
5 keyup "Q" shiftKey
6 keyup "Shift"

キーが複数キー操作列の一部(デッドキーや IME操作系列など)なら、デフォルト動作keydown イベントでキャンセルされた場合のみ、そのキーストロークは無視する(計算から除外する)必要があります。keyup イベントで デッドキーをキャンセルしても、beforeinputinput イベントには影響しません。下記例はフランス配列のキーボードでフランスマッピング、修飾キーなしでデッドキー "Dead"U+0302 サーカムフレックスアクセントキー)と "e"U+0065、ラテン小文字eキー)を使用する操作例です:

イベントタイプ KeyboardEvent
key
InputEvent
data
注記
1 keydown "Dead" デフォルト動作が阻止される(例:preventDefault() を呼び出す)
2 keyup "Dead"
3 keydown "e"
4 beforeinput "e"
5 input
6 keyup "e"

5. 外部アルゴリズム

このセクションには本仕様で必要とされるアルゴリズムが記載されていますが、 本来は他仕様にて定義されるべきものです。

意図としては、このセクションが一時的な定義の置き場となっており、 いずれより適切な場所に移されたうえでこのセクション全体が削除されるべきです。

5.1. DOM コア アルゴリズム

以下のアルゴリズムは移設が必要です...どこかに。

5.2. PointerLock アルゴリズム

次のアルゴリズムは [PointerLock] 仕様に移設すべきです。

5.2.1. PointerLock のグローバル状態

5.2.1.1. Window レベルの状態

UA は Window 全体で共有される次の値を保持しなければなりません。

last mouse move 値(初期値は未定義)。直近の mousemove イベントの位置を記録します。

5.2.2. MouseEvent の PointerLock 属性初期化

入力

eventMouseEvent

出力

なし

  1. event.movementX = 0 に設定

  2. event.movementY = 0 に設定

5.2.3. mousemove の PointerLock 属性設定

入力

eventMouseEvent

出力

なし

  1. event.type が "mousemove" でない場合は終了

  2. last mouse move が定義されていない場合は

    1. event.movementX = 0 に設定

    2. event.movementY = 0 に設定

  3. それ以外の場合、

    1. event.movementX = event.screenX - last mouse move の x座標

    2. event.movementY = event.screenX - last mouse move の y座標

  4. last mouse move = ( event.screenX, event.screenY )

6. レガシーイベント初期化子

このセクションは規範的記述です。 以下の機能は既に廃止されており、レガシーソフトウェアとの互換性を必要とする ユーザーエージェントだけが実装すべきものです。

この仕様の初期バージョンでは、 インターフェイス上にイベント初期化メソッド(例:initMouseEvent)が含まれており、 多くの場合イベントオブジェクトの全属性を完全に初期化できない多数のパラメータを要求していました。 このため、基本のEvent インターフェイスから派生したイベントインターフェイスでは、 派生インターフェイスのそれぞれの初期化子を明示的に呼び出して イベントを完全初期化する必要がありました。

UIEventの全属性を初期化するには initEventinitUIEvent の2つの初期化メソッドの呼び出しが必要です。

この標準の開発期間の長さもあり、いくつかの実装ではこの(現在は廃止された)初期化子に依存している場合があります。 完全性のために、これらレガシーイベント初期化子はこの付録で説明されています。

6.1. レガシーイベント初期化インターフェイス

このセクションは参考情報です

このセクションでは過去バージョンで導入されたレガシー初期化メソッドを記録します。

6.1.1. UIEventインターフェイスの初期化子

partial interface UIEvent {
  // この仕様で非推奨
  undefined initUIEvent(DOMString typeArg,
    optional boolean bubblesArg = false,
    optional boolean cancelableArg = false,
    optional Window? viewArg = null,
    optional long detailArg = 0);
};
initUIEvent(typeArg)
UIEvent オブジェクトの属性を初期化します。 このメソッドは initEvent() と同じ振る舞いをします。

initUIEvent メソッドは非推奨ですが、 広く展開されている実装との後方互換性のためにサポートされています。

DOMString typeArg
このパラメータの説明については initEvent() を参照してください。
boolean bubblesArg
このパラメータの説明については initEvent() を参照してください。
boolean cancelableArg
このパラメータの説明については initEvent() を参照してください。
Window? viewArg
view を指定します。 この値は null であってもよい (MAY)。
long detailArg
detail を指定します。

6.1.2. KeyboardEventインターフェイスの初期化子

このレガシーKeyboardEvent初期化子の引数リストは detailArg を含まず(他の初期化子にはある) locale 引数を追加しています。 既存実装との互換性保持のためこの不一致を維持する必要があります。

partial interface KeyboardEvent {
  // この仕様で導入(および非推奨)
  undefined initKeyboardEvent(DOMString typeArg,
    optional boolean bubblesArg = false,
    optional boolean cancelableArg = false,
    optional Window? viewArg = null,
    optional DOMString keyArg = "",
    optional unsigned long locationArg = 0,
    optional boolean ctrlKey = false,
    optional boolean altKey = false,
    optional boolean shiftKey = false,
    optional boolean metaKey = false);
};
initKeyboardEvent(typeArg)
KeyboardEvent の KeyboardEvent オブジェクトの属性を初期化します。This method has the same behavior as UIEvent.initUIEvent(). detail の値は未定義のままです。

initKeyboardEvent メソッドは非推奨です。

DOMString typeArg
このパラメータの説明については initEvent() メソッドを参照してください。
boolean bubblesArg
このパラメータの説明については initEvent() メソッドを参照してください。
boolean cancelableArg
このパラメータの説明については initEvent() メソッドを参照してください。
Window? viewArg
view を指定します。 この値は null であってもよい(MAY)。
DOMString keyArg
key を指定します。
unsigned long locationArg
location を指定します。
boolean ctrlKey
Control キー修飾子が有効かどうかを指定します。
boolean altKey
Alt キー修飾子が有効かどうかを指定します。
boolean shiftKey
Shift キー修飾子が有効かどうかを指定します。
boolean metaKey
Meta キー修飾子が有効かどうかを指定します。

6.1.3. CompositionEventインターフェイスの初期化子

このレガシーCompositionEvent初期化子の引数リストは detailArg を含まず(他の初期化子にはある) locale 引数を追加します。 既存実装との互換性保持のためこの不一致を維持する必要があります。

partial interface CompositionEvent {
  // この仕様で導入(および非推奨)
  undefined initCompositionEvent(DOMString typeArg,
    optional boolean bubblesArg = false,
    optional boolean cancelableArg = false,
    optional WindowProxy? viewArg = null,
    optional DOMString dataArg = "");
};
initCompositionEvent(typeArg)
CompositionEvent オブジェクトの属性を初期化します。 このメソッドは UIEvent.initUIEvent() と同じ振る舞いをします。detail の値は未定義のままです。

initCompositionEvent メソッドは非推奨です。

DOMString typeArg
initEvent() メソッドを参照してこのパラメータの説明を確認してください。
boolean bubblesArg
initEvent() メソッドを参照してこのパラメータの説明を確認してください。
boolean cancelableArg
initEvent() メソッドを参照してこのパラメータの説明を確認してください。
Window? viewArg
view を指定します。 この値は null であってもよい (MAY)。
DOMString dataArg
data を指定します。

7. レガシーキー・マウスイベント属性

このセクションは規範外です。以下の属性は廃止されており、レガシーなソフトウェアがこれらのキーボードイベントを必要とする場合に限定して ユーザーエージェントが実装すべきです。

これらの機能は正式に仕様化されたことはなく、現在のブラウザ実装間でも大きく異なります。
レガシーコンテンツ(スクリプトライブラリ等含む)が ユーザーエージェント判別に依存し挙動を変えるケースが多く、 こうしたレガシー属性やイベントの仕様化はむしろ互換性問題を引き起こしかねません。
また、国際化やアクセシビリティにも適していません。

したがって、この仕様はキーボード入力を扱う際によく用いられたイベントや属性を規範的に定義しませんが、 ユーザーエージェントによるレガシーコンテンツ互換のため 実装されている場合があります。著者は key 属性のみを用い、 charCodekeyCode 属性は使用しないことが推奨されます。

ただしこれら機能の現状と規範イベント属性との関係を記録する目的で、 本セクションは説明的記述を記載します。 もし実装がこれらの属性やイベントをサポートする場合、本セクションの定義に従うことを推奨します。

7.1. レガシー UIEvent 補助インターフェイス

このセクションは規範外です

ユーザーエージェントwhich 属性を伝統的に備えており、 KeyboardEventMouseEvent の補助的イベント情報記録に利用されてきました。

以前は which 属性が KeyboardEventMouseEvent に直接定義されていましたが、 現在は UIEvent で共有される属性となっています。

7.1.1. インターフェイス UIEvent(補助)

部分 UIEvent インターフェイスは UIEvent インターフェイスの説明的拡張であり、which 属性を追加します。

partial interface UIEvent {
  // The following support legacy user agents
  readonly attribute unsigned long which;
};
which, unsigned long(読み取り専用)
MouseEvent の場合、button+1 の値が入ります。 KeyboardEvent の場合、押されたキーの修飾無し識別子に対応するシステム/実装依存の数値コードが入ります。多くの場合、値は keyCode と同じです。

7.1.2. 辞書 UIEventInit(補助)

UIEventwhich をサポートするなら UIEventInit 辞書にも以下メンバーを追加すべきです。

部分 UIEventInit 辞書は UIEventInit 辞書の説明的拡張であり、 which メンバーを追加し、 属性初期化用に使えます。

partial dictionary UIEventInit {
  unsigned long which = 0;
};
which, unsigned long(初期値0
which 属性を UIEvent に初期化します。

7.2. レガシー KeyboardEvent 補助インターフェイス

このセクションは規範外です

キーボードのブラウザサポートは keyCodecharCode、 および UIEventwhich という3つのアドホック属性に 伝統的に依存してきました。

これら3つの属性はすべて、押されたキーの何らかの側面を表す数値コードを返します:keyCode はキー自体のインデックスです。charCode は文字キーのASCII値を表します。 which は利用可能な場合は文字値を、それ以外はキーのインデックスを返します。これらの属性の値や属性の利用可否は、 プラットフォームやキーボードの言語・レイアウト、ユーザー エージェント、バージョン、そしてイベントタイプによって一貫性がありません。

7.2.1. インターフェイス KeyboardEvent(補助)

partial KeyboardEvent インターフェースは、KeyboardEvent インターフェースの情報的な拡張であり、 charCode および keyCode 属性を追加するものです。

部分 KeyboardEvent インターフェイスはこの拡張をサポートする実装で createEvent() メソッド呼び出しで取得できます。

partial interface KeyboardEvent {
  // The following support legacy user agents
  readonly attribute unsigned long charCode;
  readonly attribute unsigned long keyCode;
};
charCode, unsigned long(読み取り専用)
charCodekeypress イベントで文字入力を生成した場合にその文字値を保持します。 値はその文字のUnicode参照番号(コードポイント)になります (例:印字文字なら event.charCode = event.key.charCodeAt(0))。 keydownkeyup イベントでは値 0 となります。
keyCode, unsigned long(読み取り専用)
keyCode は 押されたキーの修飾無し識別子に対応するシステム/実装依存の数値コードを保持します。 key 属性と異なり、値の集合はこの仕様では規範的に定義されません。 通常 keyCode の値は ASCII [RFC20][US-ASCII] または Windows 1252 [WIN1252] の10進コードポイントとなるべきですが、 他の適切な文字集合の場合もあります。 実装でキー識別不能な場合は 0 を用います。

詳細は § 7.3 レガシーキーモデル を参照してください。 keyCode の値判定方法について説明があります。

7.2.2. 辞書 KeyboardEventInit(補助)

KeyboardEventkeyCodecharCode をサポートするなら KeyboardEventInit 辞書にも以下メンバーを追加すべきです。

部分 KeyboardEventInit 辞書は KeyboardEventInit 辞書の説明的拡張であり、 charCodekeyCode メンバーを追加し、 属性初期化用に使えます。

partial dictionary KeyboardEventInit {
  // The following support legacy user agents
  unsigned long charCode = 0;
  unsigned long keyCode = 0;
};
charCode, unsigned long(初期値0
charCode 属性を KeyboardEvent にイベントの文字のUnicodeコードポイントで初期化します。
keyCode, unsigned long(初期値0
keyCode 属性を KeyboardEvent に押されたキーの修飾無し識別子に対応するシステム/実装依存の数値コードで初期化します。

7.3. レガシーキーのモデル

このセクションは非規範的です

イベントタイプごとにこれら属性で公開される値は実装によって異なります。実装はkeyCode プロパティで仮想キーコードと文字コードを両方公開してもよく(混合モデル)、またはkeyCodecharCode を分離して報告する(分離モデル)こともあります。

7.3.1. keyCode の算出方法(keydownkeyup

keyCodekeydownkeyup)は次のように算出します:

7.3.2. keyCode の算出方法(keypress

keyCodekeypress)は次のように算出します:

7.3.3. 固定仮想キーコード

以下のキーはデスクトップシステムでキーボードレイアウトに関係なく仮想キーコードが通常変わりません:

キー 仮想キー
コード
備考
Backspace 8
Tab 9
Enter 13
Shift 16
Control 17
Alt 18
CapsLock 20
Escape 27 Esc
Space 32
PageUp 33
PageDown 34
End 35
Home 36
ArrowLeft 37
ArrowUp 38
ArrowRight 39
ArrowDown 40
Delete 46 Del

7.3.4. オプション固定仮想キーコード

以下の記号文字はキーボードレイアウトによって仮想コードが変化する場合もありますが、US英語キーボードレイアウトを期待するレガシーコンテンツとの互換性のため、これらの値で報告する方がより互換性があります:

キー 文字 仮想キー
コード
Semicolon ";" 186
Colon ":" 186
Equals sign "=" 187
Plus "+" 187
Comma "," 188
Less than sign "<" 188
Minus "-" 189
Underscore "_" 189
Period "." 190
Greater than sign ">" 190
Forward slash "/" 191
Question mark "?" 191
Backtick "`" 192
Tilde "~" 192
Opening squace bracket "[" 219
Opening curly brace "{" 219
Backslash "\" 220
Pipe "|" 220
Closing square bracket "]" 221
Closing curly brace "}" 221
Single quote "'" 222
Double quote """ 222

8. レガシー イベントタイプ

このセクションは規範的です。以下のイベントタイプは廃止されており、 レガシーソフトウェアとの互換性を必要とするユーザーエージェントのみが実装すべきです。

このセクションの目的は、これらの機能の現状と規範的なイベントとの関係を記録することです。 これらのイベントをサポートする実装においては、本セクションに記載されている定義を使用することが推奨されます。

Event Type 同期 / 非同期 バブル段階 信頼できるターゲットタイプ DOM インターフェイス キャンセル可能 合成 デフォルトアクション
DOMActivate 同期 はい Element UIEvent はい はい なし
DOMFocusIn 同期 はい Window, Element FocusEvent いいえ はい なし
DOMFocusOut 同期 はい Window, Element FocusEvent いいえ はい なし
keypress 同期 はい Element KeyboardEvent はい はい 可変: テキスト合成システムの起動; blurfocus イベント; DOMActivate イベント; その他イベント
textInput 同期 はい Element TextEvent はい はい 定義を参照

8.1. レガシー UIEvent イベント

8.1.1. レガシー UIEvent イベントタイプ

8.1.1.1. DOMActivate
タイプ DOMActivate
インターフェイス UIEvent
同期 / 非同期 同期
バブル はい
信頼できるターゲット Element
キャンセル可能 はい
合成 はい
デフォルトアクション なし
コンテキスト
(trusted events)

ユーザー エージェントは、ボタン、リンク、またはその他の状態変更要素が活性化されたときにこのイベントを発火しなければなりません。

DOMActivate イベントタイプは参照と完全性のために本仕様で定義されていますが、 本仕様はこのイベントタイプの使用を関連するイベントタイプ click の使用に置き換えることを非推奨とします。他の仕様は後方互換のために独自に DOMActivate イベントタイプを定義・維持する場合があります。

DOMActivateclick は完全に同等ではありませんが、 実装上の挙動は、click のイベントタイプが、DOMActivate の設計時に想定された重要なアクセシビリティ要件を包含するように発展しており、 より広く実装されています。コンテンツ作者は、最大のアクセシビリティを確保するために関連する click イベントタイプを使用し、関連する mousedownmouseup イベントタイプの代わりに利用することを推奨します。

もし実装が DOMActivate イベントタイプをサポートする場合、 実装はclick イベントのデフォルト動作として DOMActivate イベントを発火すべきです。ただし、そのような実装は任意の発生に対して関連するアクティベーション動作を一度だけ開始するべきです。

DOMActivate イベントタイプは、XForms [XFORMS11] での必須サポート対象です。 ネイティブ実装が DOMActivate をサポートしない場合に、プラグインやスクリプトベースの XForms 実装を導入するような状況では、XForms を動かすユーザーエージェントは適切なアクティベーショントリガーに基づいて独自に DOMActivate イベントを合成して発火する必要があります。

したがって、UI Events に準拠するユーザーエージェントclick イベントを発火した場合、 XForms を扱うユーザーエージェントは、その click イベントのデフォルト動作と同等の関連プロパティを持つ DOMActivate イベントを合成するかどうかを判断する必要があります。 判断の手がかりとしては、click イベントの isTrusted だったか、あるいはその イベントターゲットDOMActivateイベントリスナー が登録されているか等が考えられます。

多くのユーザーエージェントでの DOMActivate の相互運用的なサポートをあてにしないでください。代わりに幅広い実装サポートがあるため、よりアクセシブルな振る舞いを提供する click イベントタイプを使用するべきです。

DOMActivate イベントタイプは本仕様では非推奨です。

8.1.2. アクティベーションイベント順序

もし DOMActivate イベントがユーザーエージェントによりサポートされるなら、 以下のように関連イベントは互いに対して定まった順序で発火されなければなりません(関係のあるイベントのみ列挙):

Event Type 注記
1 click
2 DOMActivate デフォルト動作、もしユーザーエージェントがサポートするなら; 合成された; isTrusted="true"
3 その他すべてのデフォルト動作、含む アクティベーション動作

もしフォーカスされた要素がキーイベントにより活性化されるなら、通常のイベント順序は次のとおりです(関係のあるイベントのみ列挙):

Event Type 注記
1 keydown 要素を活性化しうるキーでなければならない(例:Enter (スペース))。そうでなければ要素は活性化されない
2 click デフォルト動作; 合成された; isTrusted="true"
3 DOMActivate デフォルト動作、もしユーザーエージェントがサポートするなら; 合成された; isTrusted="true"
4 その他すべてのデフォルト動作、含む アクティベーション動作

8.2. レガシー FocusEvent イベント

8.2.1. レガシー FocusEvent イベントタイプ

8.2.1.1. DOMFocusIn
タイプ DOMFocusIn
インターフェイス FocusEvent
同期 / 非同期 同期
バブル はい
信頼できるターゲット Window, Element
キャンセル可能 いいえ
合成 はい
デフォルトアクション なし
コンテキスト
(trusted events)

ユーザー エージェントは、イベントターゲットがフォーカスを受け取るときにこのイベントを発火しなければなりません。フォーカスはこのイベントタイプの発火前に要素に与えられていなければなりません。 このイベントタイプは focus イベントタイプの後で発火されなければなりません。

DOMFocusIn イベントタイプは参照と完全性のために本仕様で定義されていますが、本仕様はこのイベントタイプの使用を関連するイベントタイプ focus および focusin の使用に置き換えることを非推奨とします。

8.2.1.2. DOMFocusOut
タイプ DOMFocusOut
インターフェイス FocusEvent
同期 / 非同期 同期
バブル はい
信頼できるターゲット Window, Element
キャンセル可能 いいえ
合成 はい
デフォルトアクション なし
コンテキスト
(trusted events)

ユーザー エージェントは、イベントターゲットがフォーカスを失うときにこのイベントを発火しなければなりません。フォーカスはこのイベントタイプの発火前に要素から取り除かれていなければなりません。 このイベントタイプは blur イベントタイプの後で発火されなければなりません。

DOMFocusOut イベントタイプは参照と完全性のために本仕様で定義されていますが、本仕様はこのイベントタイプの使用を関連するイベントタイプ blur および focusout の使用に置き換えることを非推奨とします。

8.2.2. レガシー FocusEvent イベント順序

以下は要素間でフォーカスが移る際の典型的なイベント順です。非推奨の DOMFocusIn および DOMFocusOut イベントを含みます。示される順序は、最初にフォーカスされている要素がないことを前提としています。

Event Type 注記
ユーザーがフォーカスを移す
1 focusin 最初のターゲット要素がフォーカスを受ける前に送信される
2 focus 最初のターゲット要素がフォーカスを受けた後に送信される
3 DOMFocusIn サポートされている場合
ユーザーがフォーカスを移す
4 focusout 最初のターゲット要素がフォーカスを失う前に送信される
5 focusin 2番目のターゲット要素がフォーカスを受ける前に送信される
6 blur 最初のターゲット要素がフォーカスを失った後に送信される
7 DOMFocusOut サポートされている場合
8 focus 2番目のターゲット要素がフォーカスを受けた後に送信される
9 DOMFocusIn サポートされている場合

8.3. レガシー KeyboardEvent イベント

keypress イベントは、 伝統的にキーイベントを捕捉し、キー押下の効果によって DOM が更新される前に処理するための方法でした。keypress イベントを利用するコードは通常、レガシーな charCode, keyCode, および which 属性に依存しています。

注意: keypress イベントはキーイベント特有のものであり、より一般的なイベント列である beforeinput および input イベントに置き換えられています。これらの新しい input イベントはキーボード動作に特化したものではなく、元の入力源にかかわらずユーザー入力を捕捉するために使用できます。

8.3.1. レガシー KeyboardEvent イベントタイプ

8.3.1.1. keypress
タイプ keypress
インターフェイス KeyboardEvent
同期 / 非同期 同期
バブル はい
信頼できるターゲット Element
キャンセル可能 はい
合成 はい
デフォルトアクション 可変: テキスト合成システムの起動; blurfocus イベント; DOMActivate イベント; その他イベント
コンテキスト
(trusted events)

もしユーザーエージェントがこのイベントをサポートするなら、 このイベントはキーが押されたときに(そのキーが通常文字値を生成する場合に限り)発火されなければなりません。 keypress イベントタイプはデバイス依存であり、 入力デバイスの能力や OS 上でのマッピングに依存します。

このイベントタイプは キー割り当て の後で生成されなければなりません。 入力方式エディタ を使用している場合は発火してはなりません。

もしこのイベントがキャンセルされた場合、input イベントの発火を防ぐべきであり、加えてデフォルト動作もキャンセルされるべきです。

作者は beforeinput イベントを keypress イベントの代わりに使用するべきです。

keypress イベントは伝統的に物理キーではなく 文字値の検出に関連付けられており、一部の構成ではすべてのキーで利用できない場合があります。

keypress イベントタイプは 参照と完全性のために本仕様で定義されていますが、本仕様はこのイベントタイプの使用を非推奨とします。編集コンテキストでは、代わりに beforeinput を購読することができます。

8.3.2. keypress イベント順序

keypress イベントタイプは、 同一キーに関連する keydown イベントの後かつ keyup イベントの前に発火されなければなりません。

keypress イベントタイプは、 同一キーに関連する beforeinput イベントの後かつ input イベントの前に発火されなければなりません。

keypress イベントをサポートするユーザーエージェントでのキーイベント列は、次の例で示されます:

Event Type KeyboardEvent
key
InputEvent
data
注記
1 keydown "a"
2 beforeinput "a"
3 keypress "a"
このキーに関連する任意のデフォルト動作、例えば DOM への文字挿入など。
4 input
5 keyup "a"

8.4. レガシー TextEvent イベント

[Exposed=Window]
interface TextEvent : UIEvent {
    readonly attribute DOMString data;
    undefined initTextEvent(DOMString type,
        optional boolean bubbles = false,
        optional boolean cancelable = false,
        optional Window? view = null,
        optional DOMString data = "undefined");
};

詳しくは UI Events Algorithms の Text Event セクション を参照してください。TextEvent インターフェイスおよび textInput イベントについて。

9. イベントの拡張

このセクションは非規範的です

9.1. はじめに

本現行標準は複数のインターフェースや多くのイベントを定義しますが、あらゆる用途に対して網羅的なイベントセットではありません。コンテンツ著者や実装者が必要な機能を追加できるよう、本現行標準では競合なくインターフェースとイベントを拡張するための2つの仕組みを提供します:カスタムイベント実装固有拡張です。

9.2. カスタムイベント

スクリプト著者が、アプリケーションを機能コンポーネント単位で定義し、そのアーキテクチャに意味のあるイベント型を利用したい場合があります。コンテンツ著者はCustomEvent インターフェースを使って、利用している抽象レベルに適した独自イベントを生成できます。

たとえば、動的に生成される棒グラフを持つアプリケーションを作成した著者がいるとします。この棒グラフは5分ごと、フィードに新情報が来たとき、またはユーザーがボタンをクリックして手動で更新したときに更新されます。グラフ更新時に複数のハンドラーを呼ぶ必要があります:最新データの取得、更新中アイコンの表示、グラフ再構築など。これを管理するため、コンテンツ著者はトリガー条件が満たされたときに発火するカスタムupdateChartイベントを作成できます:
var chartData = ...;
var evt = document.createEvent("CustomEvent");
evt.initCustomEvent( "updateChart", true, false, { data: chartData });
document.documentElement.dispatchEvent(evt);

9.3. 実装固有拡張

新しいイベントを設計・試作中や、実装固有機能向けイベントの場合は、標準化されたイベントと区別できるようにしたいものです。実装者は、実装固有イベント型には短い文字列プレフィックスを付け、他実装や標準イベントと区別するべきです。これはCSSのベンダー固有キーワードのプレフィックスに似ていますが、JavaScriptの属性名で問題となるためCSSのダッシュ("-")は使いません。

あるブラウザベンダーFooCorpが新しいイベントjumpを導入したいとします。このベンダーはプレフィックス"foo"を使い、fooJumpを実装します。早期導入者は someElement.addEventListener("fooJump", doJump, false ) を使ってイベントを試し、フィードバックに応じてFooCorpがfooJumpの挙動を調整します。

後に、別のベンダーBarOrgも同機能を少し異なる実装で導入したいと考え、プレフィックス"bar"barJumpを実装します。コンテンツ著者はBarOrg用のイベント型名でイベントを登録します。両ブラウザ対応コードは個別ハンドラーを登録するか、同一ハンドラー内でイベント型名をswitchすることで衝突を回避できます。こうした初期実験が競合を起こさず、早期導入者も複数実装向けの保守しやすいコードを書けます。

やがて、両ブラウザの挙動が成熟し、フィードバックや標準化を経て収束していくと、著者はforkしたコードを削除し、正式標準化前でも共通イベント型名jumpで同じハンドラーを使えるようになります(someElement.addEventListener( "jump", doJump, false)利用)。

9.3.1. 既知の実装固有プレフィックス

執筆時点で、以下のイベント型名プレフィックスが知られています:

プレフィックス Webエンジン 組織
moz, Moz Gecko Mozilla
ms, MS Trident Microsoft
o, O Presto Opera Software
webkit WebKit Apple, Google, 他

10. セキュリティに関する考慮事項

この付録ではUI Events実装のセキュリティに関する考慮事項について説明します。 議論は、本現行標準で定義されるイベントモデル・API・イベントの実装から直接生じるセキュリティ問題に限定されます。実装は通常、スクリプト言語や他のAPI、現行標準外の追加イベントもサポートします。これらは未知の要因であり、本書の範囲外です。 実装者はそれぞれの機能の現行標準で定められたセキュリティ考慮事項を参照するべきです。

この仕様で定義されている多くのイベントタイプは、応答として ユーザーの操作に対して発火します。これにより悪意のある イベントリスナー がアクセス可能に なる情報、例えばフォーム入力時に生じた誤入力や、複数選択式の質問に対する回答を提出直前に見直した場合の変更、 入力速度や主な入力手段といった、ユーザーが通常機密とみなす情報にアクセスできてしまう可能性があります。最悪の場合、悪意のある イベントリスナー はすべての ユーザー操作をキャプチャし、それらを DOM 実装で一般に利用可能な手段(この仕様では定義されていない)を通じて第三者に送信することがあり得ます、例えば the XMLHttpRequest interface.

外部データのロードをサポートするDOM実装では、errorイベントなどが、 コンピュータシステムやネットワーク環境の機微な情報にアクセスする手段となる場合があります。例えば、悪意あるHTML文書がローカルネットワークやlocalhost上の異なるポートへリソース埋め込みを試みる場合、埋め込まれたDOMアプリケーションがerrorloadイベントを監視して、ローカルシステムからアクセス可能な他のコンピュータや開いているポートを特定し、後続攻撃の準備が可能となります。

UI Events単体の実装ではこの種の攻撃を行うことは一般的に困難ですが、攻撃を可能にする他の機能のセキュリティ考慮事項が適用されます。本現行標準の準拠のため、DOM実装はDOMアプリケーションが機密情報やセンシティブな情報へアクセスできないよう合理的な措置を取っても構いません。例えば、ローカルネットワーク上のリソース埋め込みを試みるノードにloadイベントをディスパッチしない選択も考えられます。

11. 謝辞

多くの方々がDOM現行標準(Level 1, 2, 3)に貢献しました。DOMワーキンググループ、DOMインタレストグループ、WebAPIワーキンググループ、WebAppsワーキンググループの参加者を含み、特に以下の方々に感謝します:

Andrew Watson (Object Management Group), Andy Heninger (IBM), Angel Diaz (IBM), Anne van Kesteren (Opera Software), Arnaud Le Hors (W3C and IBM), Arun Ranganathan (AOL), Ashok Malhotra (IBM and Microsoft), Ben Chang (Oracle), Bill Shea (Merrill Lynch), Bill Smith (Sun), Björn Höhrmann, Bob Sutor (IBM), Charles McCathie-Nevile (Opera Software, 共同議長), Chris Lovett (Microsoft), Chris Wilson (Microsoft), Christophe Jolif (ILOG), David Brownell (Sun), David Ezell (Hewlett-Packard Company), David Singer (IBM), Dean Jackson (W3C, W3Cチーム連絡先), Dimitris Dimitriadis (Improve AB and invited expert), Don Park (invited), Doug Schepers (Vectoreal), Elena Litani (IBM), Eric Vasilik (Microsoft), Gavin Nicol (INSO), Gorm Haug Eriksen (Opera Software), Ian Davis (Talis Information Limited), Ian Hickson (Google), Ian Jacobs (W3C), James Clark (invited), James Davidson (Sun), Jared Sorensen (Novell), Jeroen van Rotterdam (X-Hive Corporation), Joe Kesselman (IBM), Joe Lapp (webMethods), Joe Marini (Macromedia), John Robinson (AOL), Johnny Stenback (Netscape/AOL), Jon Ferraiolo (Adobe), Jonas Sicking (Mozilla Foundation), Jonathan Marsh (Microsoft), Jonathan Robie (Texcel Research and Software AG), Kim Adamson-Sharpe (SoftQuad Software Inc.), Lauren Wood (SoftQuad Software Inc., 前議長), Laurence Cable (Sun), Luca Mascaro (HTML Writers Guild), Maciej Stachowiak (Apple Computer), Marc Hadley (Sun Microsystems), Mark Davis (IBM), Mark Scardina (Oracle), Martin Dürst (W3C), Mary Brady (NIST), Michael Shenfield (Research In Motion), Mick Goulish (Software AG), Mike Champion (Arbortext and Software AG), Miles Sabin (Cromwell Media), Patti Lutsky (Arbortext), Paul Grosso (Arbortext), Peter Sharpe (SoftQuad Software Inc.), Phil Karlton (Netscape), Philippe Le Hégaret (W3C, W3Cチーム連絡先および前議長), Ramesh Lekshmynarayanan (Merrill Lynch), Ray Whitmer (iMall, Excite@Home, Netscape/AOL, 議長), Rezaur Rahman (Intel), Rich Rollman (Microsoft), Rick Gessner (Netscape), Rick Jelliffe (invited), Rob Relyea (Microsoft), Robin Berjon (Expway, 共同議長), Scott Hayman (Research In Motion), Scott Isaacs (Microsoft), Sharon Adler (INSO), Stéphane Sire (IntuiLab), Steve Byrne (JavaSoft), Tim Bray (invited), Tim Yu (Oracle), Tom Pixley (Netscape/AOL), T.V. Raman (Google). Vidur Apparao (Netscape), Vinod Anupam (Lucent).

前編集者: Tom Pixley (Netscape Communications Corporation)(2002年7月まで)、 Philippe Le Hégaret (W3C)(2003年11月まで)、 Björn Höhrmann (Invited Expert)(2008年1月まで)、 Jacob Rossi (Microsoft)(2011年3月~10月)。

貢献者: WebAppsワーキンググループでは、以下の方々が現行標準の洗練・改訂に多大な貢献をされました: Bob Lund (Cable Laboratories), Cameron McCormack (Invited Expert / Mozilla), Daniel Danilatos (Google), Gary Kacmarcik (Google), Glenn Adams (Samsung), Hallvord R. M. Steen (Opera), Hironori Bono (Google), Mark Vickers (Comcast), Masayuki Nakano (Mozilla), Olli Pettay (Mozilla), Takayoshi Kochi (Google), Travis Leithead (Microsoft)。

用語集貢献者: Arnaud Le Hors (W3C)、Robert S. Sutor (IBM Research)。

テストスイート貢献者: Carmelo Montanez (NIST), Fred Drake, Mary Brady (NIST), Neil Delima (IBM), Rick Rivello (NIST), Robert Clary (Netscape), 特別にCurt Arnoldにも感謝します。

本現行標準の改良にあたり、提案や修正を送ってくださった皆様(是非今後もフィードバックください!)、また有用な書籍やウェブサイトを執筆された方々にも感謝します: Al Gilman, Alex Russell, Alexander J. Vincent, Alexey Proskuryakov, Arkadiusz Michalski, Brad Pettit, Cameron McCormack, Chris Rebert, Curt Arnold, David Flanagan, Dylan Schiemann, Erik Arvidsson, Garrett Smith, Giuseppe Pascale, James Su, Jan Goyvaerts (regular-expressions.info), Jorge Chamorro, Kazuyuki Ashimura, Ken Rehor, Magnus Kristiansen, Martijn Wargers, Martin Dürst, Michael B. Allen, Mike Taylor, Misha Wolf, Ojan Vafai, Oliver Hunt, Paul Irish, Peter-Paul Koch, Richard Ishida, Sean Hogan, Sergey Ilinsky, Sigurd Lerstad, Steven Pemberton, Tony Chang, William Edney, Øistein E. Andersen。

12. 用語集

以下の用語定義の一部は、他のW3Cや現行標準文書の定義を参考・改変しています。詳細は定義内リンクを参照してください。

activation trigger

あるイベントで、activation behaviorを開始するよう定義されたもの。

author

本仕様の文脈では、authorcontent author、またはscript authorとは、本仕様で定義されたインターフェイス、イベント、およびイベントフローを利用するスクリプトや他の実行可能なコンテンツを書く人を指す。詳細は§ 1.2.3 Content authors and contentの適合カテゴリを参照。

body element

HTMLまたはXHTMLのdocumentsにおいて、body要素は文書の内容を表す。整形式のHTML文書では、body要素はroot elementの最初の子孫である。

character value

キー値の文脈では、character valueは一つ以上のUnicode文字(文字や記号、または有効なUnicode character categoriesに属する文字群)を表す文字列である。本仕様では、character valuesはユニコード文字列(例: U+0020)または同じコードポイントの字形表現(例: " ")で示され、これら二つの表現を区別するために色分けされる。

ソースコードでは、非表示文字などの一部のキー値は使用しているプログラミング言語の文字エスケープ構文を使って表現できる。

dead key

dead keyはそれ自体では文字を生成しないキーまたはキーの組み合わせで、他のキーと組み合わされたり連続して押されたりすると合成文字(例: "ö", "é", "â")のような修飾された文字を生成する。

default action

A default action は、イベントオブジェクトのディスパッチと組み合わせて実装が実行しなければならないことがある任意の補助的な振る舞いである。各イベントタイプの定義および各仕様は、そのイベントタイプにデフォルトアクションがある場合、そのdefault actionを定義する。あるインスタンスのイベントは、activation triggerに関連付けられている場合のように、いくつかの状況下で複数のdefault actionを持つことがある。default actionは、preventDefault() メソッドの呼び出しによってキャンセルできる。

delta

物理的な移動を行う入力装置(マウスホイールやタッチパッドなど)をサポートするWheelEvent インターフェイスに対する応答として、ユーザーエージェントがページをスクロールまたはズームする推定量(ピクセル、行、またはページ単位)。deltaの値(例: deltaXdeltaY、または deltaZ 属性)は、現在のdeltaMode プロパティの文脈で解釈されるべきである。ホイール(または他の装置)の物理的な移動と、deltaが正か負かの関係は、環境および装置によって異なる。しかし、ユーザーエージェントがスクロールをdefault actionとして行う場合、deltaの符号は右手座標系によって与えられ、正のX,Y,Z軸はそれぞれ文書の右端、下端、および(ユーザーから離れる)奥行き方向を向く。

deprecated

deprecatedとマークされた機能は、古い実装や仕様への参照として仕様に含まれているが、任意であり推奨されない。置き換えが存在するか進行中である機能のみが本仕様でdeprecatedにされなければならない。既にその機能をサポートしていない実装は、既存のコンテンツとの後方互換性の理由でdeprecated機能を実装してもよいが、コンテンツ作成者はユースケースを解決する他の方法がない場合を除きdeprecated機能を使用すべきではない。他の仕様が本仕様を参照する際、deprecated機能を使用すべきではなく、代わりにその機能が推奨外とされる置き換えを指すべきである。本仕様でdeprecatedとマークされた機能は将来の仕様から削除されることが予想される。

empty string

空文字列は長さ0DOMString型の値であり、すなわち文字(印字可能な文字や制御文字を含まない)を一切含まない文字列です。

event focus

Event focusは文書内の特定の要素や他のevent targetに対する受容性と集中の特殊な状態である。各要素は、その機能に応じてフォーカス時に異なる振る舞いを持ち、例えば(ボタンやハイパーリンクのように)要素をアクティベーションに備える、状態を切り替える(チェックボックスのように)、テキスト入力を受け取る(テキストフォームフィールドのように)、選択したテキストをコピーするなどがある。詳細は§ 3.3.3 Document Focus and Focus Contextを参照。

event focus ring

event focus ringはドキュメント内のevent focusターゲットの順序付けられた集合である。host languageは、ドキュメント順、各フォーカスターゲットに対して定義された数値インデックス、フォーカスターゲット間の明示的なポインタ、または異なるモデルのハイブリッドなど、ターゲットの順序を決定する一つ以上の方法を定義してもよい。各ドキュメントは複数のフォーカスリング、または条件付きフォーカスリングを含むことができる。通常、ドキュメント順またはインデックス付きフォーカスリングでは、フォーカスは最後のフォーカスターゲットから最初に「巻き戻る」ことがある。

event target

イベントフローを用いてイベントがターゲットにされるオブジェクト。event targetはイベントオブジェクトのtarget 属性の値である。

event type

event typeは特定の名前を持ち、他のイベントタイプと区別する特定のトリガー条件、プロパティ、および他の特性を定義するeventオブジェクトである。例えば、keydown イベントタイプは、blurloadのようなイベントタイプとは異なる特性を持つ。イベントタイプはイベントオブジェクト上のtype 属性として公開される。また、"event"(例: keydown event)のように緩やかに言及されることもある。

host language

他の言語やAPI仕様の機能を統合する際、機能を再定義するのではなく元の仕様を規範的に参照し、 元の仕様で定められた方法だけで機能を拡張する言語を指す。元の仕様は通常、単独の言語としてではなく 一つ以上のホスト言語の文脈で実装されることを意図している。例えば、XHTML、HTML、SVGはUI Eventsのホスト言語であり、 本仕様で定義されたオブジェクトやモデルを統合・拡張する。

IME
input method editor

input method editor(IMEとしても知られる、フロントエンドプロセッサとも)は、通常、辞書検索によるユーザー主導の変換を通じて、キーストロークと表意文字や他の文字との間の変換を行うアプリケーションであり、東アジア言語(例: 中国語、日本語、韓国語)でよく使用される。IMEは、モバイルデバイス上の語完成のような辞書ベースの補完にも使用されることがある。本仕様におけるIMEの扱いについては§ 4.3.3 Input Method Editorsを参照。text composition systemも参照。

key mapping

キーにキー値を割り当てるプロセスであり、オペレーティングシステムやキーボードレイアウト(例: QWERTY、Dvorak、スペイン語、InScript、中国語など)を含むいくつかの要因の組み合わせの結果であり、すべてのmodifier keyShiftAltなど)やdead key状態を考慮した後の結果である。

key value

key valueはcharacter valueまたは複数文字の文字列(例: "Enter""Tab"、または "MediaTrackNext")で、特定の状態にあるキーに関連付けられる。すべてのキーはkey valueを持ち、character valueを持つかどうかにかかわらない。これには制御キー、ファンクションキー、modifier keysdead keys、およびその他のキーが含まれる。任意の時点でのあるキーのkey valueはkey mappingに依存する。

modifier key

modifier keyはキーの通常の動作を変更するキーであり、例えば(Shiftキーのように)異なる大文字の文字を生成したり、(FnAltキーのように)キーがトリガーする機能を変更したりする。modifier keysの詳細については§ 4.3.1 Modifier keysを参照し、Modifier Keys table([UIEvents-Key])で有効なmodifier keysの一覧を参照。

namespace URI

namespace URIはXML名前空間を識別するURIである。これは[XML-Names11]で名前空間名と呼ばれる。DOM APIにおけるURIおよび名前空間URIの扱いと比較については、1.3.2のDOM URIsおよび1.3.3のXML Namespacesセクションも参照。

QWERTY

QWERTY(発音: ˈkwɜrti)は一般的なキーボードレイアウトで、上段の文字キーの最初の五つがQ, W, E, R, T, Yであることに由来する。他にもDvorakやColemakなど多くの人気のあるキーボードレイアウトがあり、多くはローカライズや人間工学を目的として設計されている。

root element

documentの最初の要素ノードで、他のすべての要素がその子である。ドキュメント要素。

text composition system

代替入力(input method editor、音声処理、手書き認識システムなど)を解釈してテキストに変換するソフトウェアコンポーネント。

Unicode character categories

各Unicodeコードポイントに定義されるGeneral Category値の部分集合。この部分集合には、Letter (LlLmLoLtLu)、 Number (NdNlNo)、 Punctuation (PcPdPePfPiPoPs)およびSymbol (ScSkSmSo)カテゴリ値が含まれる。

un-initialized value

イベント属性(例: bubblescurrentTarget)がinitEvent()で初期化される前の値。un-initialized valuesは、createEvent() メソッドを使用して新しいイベントが作成された直後に適用される。

適合性

文書上の規約

適合性要件は、記述的断定およびRFC 2119の用語を組み合わせて表現されています。 規範的部分で使われる「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」などのキーワードはRFC 2119で説明された通りに解釈してください。 ただし、可読性のため、本現行標準ではこれらの語はすべて大文字ではなく小文字で表記されています。

本現行標準の全ての本文は規範的ですが、明示的に非規範的と記載されたセクション、例、注記は除きます。[RFC2119]

本現行標準の例は、「for example」で始まるか、class="example"で規範的本文から分離されています。例:

これは参考例の一例です。

参考的注記は「Note」で始まり、class="note"で規範的本文から分離されます。例:

注:これは参考的注記です。

適合するアルゴリズム

アルゴリズム内で命令形で記述される要件(例:「先頭の空白文字を除去する」「falseを返してこれらの手順を中断する」など)は、アルゴリズム導入部で使われるキーワード("must"、"should"、"may"など)に従って解釈してください。

アルゴリズムや具体的手順として表現された適合性要件は、最終結果が同等である限り、どのような方法で実装しても構いません。 特に、本現行標準で定義されるアルゴリズムは理解しやすいことを重視しており、効率性は意図していません。 実装者は最適化することを推奨します。

索引

この仕様で定義された用語

参考で定義される用語

参考文献

規範的参考文献

[CSS-COLOR-3]
Tantek Çelik; Chris Lilley; David Baron. CSS Color Module Level 3. 2022年1月18日. REC. URL: https://www.w3.org/TR/css-color-3/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[DOM-Level-3-Core]
Arnaud Le Hors; et al. Document Object Model (DOM) Level 3 Core Specification. 2021年9月28日. REC. URL: https://www.w3.org/TR/DOM-Level-3-Core/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[POINTEREVENTS4]
Patrick Lauke; Robert Flack. Pointer Events. 2026年2月11日. WD. URL: https://www.w3.org/TR/pointerevents4/
[PointerLock]
Mustaq Ahmed; Vincent Scheib. Pointer Lock 2.0. 2025年9月29日. WD. URL: https://www.w3.org/TR/pointerlock-2/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[UIEvents-Code]
Travis Leithead; Gary Kacmarcik. UI Events KeyboardEvent code Values. 2025年4月22日. REC. URL: https://www.w3.org/TR/uievents-code/
[UIEvents-Key]
Travis Leithead; Gary Kacmarcik. UI Events KeyboardEvent key Values. 2025年4月22日. REC. URL: https://www.w3.org/TR/uievents-key/
[WebIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

参考的参考文献

[DWW95]
N. Kano. Windows 95 および Windows NT の国際ソフトウェア開発: 国際ソフトウェア設計ハンドブック. 1995.
[Editing]
A. Gregor. HTML 編集 API. URL: https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html
[HTML5]
Ian Hickson; et al. HTML5. 2018年3月27日. REC. URL: https://www.w3.org/TR/html5/
[Input-Events]
Johannes Wilm. Input Events レベル 2. 2025年8月14日. WD. URL: https://www.w3.org/TR/input-events-2/
[RFC20]
V.G. Cerf. ネットワーク交換のための ASCII 形式. 1969年10月. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc20
[UAAG20]
James Allan; et al. User Agent Accessibility Guidelines (UAAG) 2.0. 2015年12月15日. NOTE. URL: https://www.w3.org/TR/UAAG20/
[UAX15]
Ken Whistler. Unicode 正規化形式. 2025年7月30日. Unicode Standard Annex #15. URL: https://www.unicode.org/reports/tr15/tr15-57.html
[Unicode]
Unicode 標準. URL: https://www.unicode.org/versions/latest/
[US-ASCII]
符号化文字集合 — 情報交換のための 7 ビット米国標準コード (ASCII). 1986.
[WIN1252]
Windows 1252: 符号化文字集合 — 8 ビット. URL: https://www.microsoft.com/globaldev/reference/sbcs/1252.htm
[XFORMS11]
John Boyer. XForms 1.1. 2009年10月20日. REC. URL: https://www.w3.org/TR/xforms11/
[XML]
Tim Bray; et al. 拡張可能マークアップ言語 (XML) 1.0(第5版). 2008年11月26日. REC. URL: https://www.w3.org/TR/xml/
[XML-Names11]
Tim Bray; et al. XML 1.1 における名前空間(第2版). 2006年8月16日. REC. URL: https://www.w3.org/TR/xml-names11/

IDL索引

[Exposed=Window]
interface UIEvent : Event {
  constructor(DOMString type, optional UIEventInit eventInitDict = {});
  readonly attribute Window? view;
  readonly attribute long detail;
};

dictionary UIEventInit : EventInit {
  Window? view = null;
  long detail = 0;
};

[Exposed=Window]
interface FocusEvent : UIEvent {
  constructor(DOMString type, optional FocusEventInit eventInitDict = {});
  readonly attribute EventTarget? relatedTarget;
};

dictionary FocusEventInit : UIEventInit {
  EventTarget? relatedTarget = null;
};

[Exposed=Window]
interface InputEvent : UIEvent {
  constructor(DOMString type, optional InputEventInit eventInitDict = {});
  readonly attribute USVString? data;
  readonly attribute boolean isComposing;
  readonly attribute DOMString inputType;
};

dictionary InputEventInit : UIEventInit {
  DOMString? data = null;
  boolean isComposing = false;
  DOMString inputType = "";
};

[Exposed=Window]
interface KeyboardEvent : UIEvent {
  constructor(DOMString type, optional KeyboardEventInit eventInitDict = {});
  // KeyLocationCode
  const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;
  const unsigned long DOM_KEY_LOCATION_LEFT = 0x01;
  const unsigned long DOM_KEY_LOCATION_RIGHT = 0x02;
  const unsigned long DOM_KEY_LOCATION_NUMPAD = 0x03;

  readonly attribute DOMString key;
  readonly attribute DOMString code;
  readonly attribute unsigned long location;

  readonly attribute boolean ctrlKey;
  readonly attribute boolean shiftKey;
  readonly attribute boolean altKey;
  readonly attribute boolean metaKey;

  readonly attribute boolean repeat;
  readonly attribute boolean isComposing;

  boolean getModifierState(DOMString keyArg);
};

dictionary KeyboardEventInit : EventModifierInit {
  DOMString key = "";
  DOMString code = "";
  unsigned long location = 0;
  boolean repeat = false;
  boolean isComposing = false;
};

dictionary EventModifierInit : UIEventInit {
  boolean ctrlKey = false;
  boolean shiftKey = false;
  boolean altKey = false;
  boolean metaKey = false;

  boolean modifierAltGraph = false;
  boolean modifierCapsLock = false;
  boolean modifierFn = false;
  boolean modifierFnLock = false;
  boolean modifierHyper = false;
  boolean modifierNumLock = false;
  boolean modifierScrollLock = false;
  boolean modifierSuper = false;
  boolean modifierSymbol = false;
  boolean modifierSymbolLock = false;
};

[Exposed=Window]
interface CompositionEvent : UIEvent {
  constructor(DOMString type, optional CompositionEventInit eventInitDict = {});
  readonly attribute USVString data;
};

dictionary CompositionEventInit : UIEventInit {
  DOMString data = "";
};

partial interface UIEvent {
  // Deprecated in this specification
  undefined initUIEvent(DOMString typeArg,
    optional boolean bubblesArg = false,
    optional boolean cancelableArg = false,
    optional Window? viewArg = null,
    optional long detailArg = 0);
};

partial interface KeyboardEvent {
  // Originally introduced (and deprecated) in this specification
  undefined initKeyboardEvent(DOMString typeArg,
    optional boolean bubblesArg = false,
    optional boolean cancelableArg = false,
    optional Window? viewArg = null,
    optional DOMString keyArg = "",
    optional unsigned long locationArg = 0,
    optional boolean ctrlKey = false,
    optional boolean altKey = false,
    optional boolean shiftKey = false,
    optional boolean metaKey = false);
};

partial interface CompositionEvent {
  // Originally introduced (and deprecated) in this specification
  undefined initCompositionEvent(DOMString typeArg,
    optional boolean bubblesArg = false,
    optional boolean cancelableArg = false,
    optional WindowProxy? viewArg = null,
    optional DOMString dataArg = "");
};

partial interface UIEvent {
  // The following support legacy user agents
  readonly attribute unsigned long which;
};

partial dictionary UIEventInit {
  unsigned long which = 0;
};

partial interface KeyboardEvent {
  // The following support legacy user agents
  readonly attribute unsigned long charCode;
  readonly attribute unsigned long keyCode;
};

partial dictionary KeyboardEventInit {
  // The following support legacy user agents
  unsigned long charCode = 0;
  unsigned long keyCode = 0;
};

[Exposed=Window]
interface TextEvent : UIEvent {
    readonly attribute DOMString data;
    undefined initTextEvent(DOMString type,
        optional boolean bubbles = false,
        optional boolean cancelable = false,
        optional Window? view = null,
        optional DOMString data = "undefined");
};

課題索引

UI EventsアルゴリズムのText EventセクションTextEventインターフェースおよび textInputイベントを参照してください。
MDN

CompositionEvent/CompositionEvent

In all current engines.

Firefox53+Safari7+Chrome26+
Opera?Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

CompositionEvent/data

In all current engines.

Firefox9+Safari5+Chrome15+
Opera?Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile?
MDN

CompositionEvent

In all current engines.

Firefox9+Safari5+Chrome15+
Opera?Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Element/blur_event

In all current engines.

Firefox24+Safari3.1+Chrome1+
Opera11.6+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+

Window/blur_event

In all current engines.

Firefox6+Safari5.1+Chrome5+
Opera12.1+Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

Element/compositionend_event

In all current engines.

Firefox9+Safari5+Chrome15+
Opera15+Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile14+
MDN

Element/compositionstart_event

In all current engines.

Firefox9+Safari5+Chrome15+
Opera15+Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile14+
MDN

Element/compositionupdate_event

In all current engines.

Firefox9+Safari5+Chrome18+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile?
MDN

Element/focus_event

In all current engines.

Firefox24+Safari3.1+Chrome1+
Opera11.6+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+

Window/focus_event

In all current engines.

Firefox6+Safari5.1+Chrome5+
Opera12.1+Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

Element/focusin_event

In all current engines.

Firefox52+Safari5+Chrome1+
Opera11.6+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

Element/focusout_event

In all current engines.

Firefox52+Safari5+Chrome1+
Opera11.6+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

Element/keydown_event

In all current engines.

Firefox6+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/keyup_event

In all current engines.

Firefox6+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

FocusEvent/FocusEvent

In all current engines.

Firefox24+Safari7+Chrome26+
Opera?Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

FocusEvent/relatedTarget

In all current engines.

Firefox24+Safari7+Chrome26+
Opera?Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

FocusEvent

In all current engines.

Firefox24+Safari7+Chrome26+
Opera?Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

HTMLElement/beforeinput_event

In all current engines.

Firefox87+Safari10.1+Chrome60+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

HTMLElement/error_event

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

HTMLElement/input_event

In all current engines.

Firefox6+Safari3.1+Chrome1+
Opera11.6+Edge79+
Edge (Legacy)NoneIENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12+
MDN

InputEvent/InputEvent

Firefox31+SafariNoneChrome60+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

InputEvent/inputType

In all current engines.

Firefox66+Safari10.1+Chrome60+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

InputEvent/isComposing

In all current engines.

Firefox31+Safari16.4+Chrome60+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

InputEvent

In all current engines.

Firefox31+Safari10.1+Chrome60+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

KeyboardEvent/KeyboardEvent

In all current engines.

Firefox31+Safari7+Chrome26+
Opera?Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

KeyboardEvent/altKey

In all current engines.

Firefox1.5+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

KeyboardEvent/code

In all current engines.

Firefox38+Safari10.1+Chrome48+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

KeyboardEvent/ctrlKey

In all current engines.

Firefox1.5+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

KeyboardEvent/getModifierState

In all current engines.

Firefox15+Safari10.1+Chrome30+
Opera?Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

KeyboardEvent/isComposing

In all current engines.

Firefox31+Safari10.1+Chrome56+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

KeyboardEvent/key

In all current engines.

Firefox23+Safari10.1+Chrome51+
Opera?Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

KeyboardEvent/location

In all current engines.

Firefox15+Safari8+Chrome30+
Opera?Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

KeyboardEvent/metaKey

In all current engines.

Firefox1.5+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

KeyboardEvent/repeat

In all current engines.

Firefox28+Safari10.1+Chrome32+
Opera?Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

KeyboardEvent/shiftKey

In all current engines.

Firefox1.5+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

KeyboardEvent

In all current engines.

Firefox1.5+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

UIEvent/UIEvent

In all current engines.

Firefox11+Safari7+Chrome26+
Opera?Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView1+Samsung Internet1.0+Opera Mobile?
MDN

UIEvent/detail

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

UIEvent/view

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

UIEvent

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

Window/load_event

In all current engines.

Firefox1+Safari1.3+Chrome1+
Opera4+Edge79+
Edge (Legacy)12+IE4+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+