1. はじめに
1.1. 概要
UI Eventsは主に2つの目的で設計されています。最初の目的は、event システムを設計することであり、これにより event listeners の登録を可能にし、イベントがツリー構造を通じて流れる仕組みを記述します。さらに、本仕様ではユーザーインターフェイス制御やドキュメントの変更通知のための標準的なイベントモジュールを提供し、これらの各イベントモジュールに関するコンテキスト情報も定義します。
UI Eventsの2つ目の目的は、現行のブラウザで使用されているイベントシステムの共通部分集合を提供することです。これは、既存のスクリプトやコンテンツの相互運用性を促進するためです。この目的が完全な後方互換性を持って達成されるとは期待されていませんが、可能な限りその達成を目指しています。
1.1.1. マウス及びホイールイベント
この仕様の「マウスイベント」と「ホイールイベント」のセクションは、Pointer Events仕様 [pointerevents4] に移動されました。
1.2. 適合性
このセクションは規範的です。
本仕様書内では、キーワード MUST
、MUST NOT
、REQUIRED
、SHALL
、SHALL
NOT
、SHOULD
、SHOULD NOT
、RECOMMENDED
、MAY
、および 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
agent は DOMString データ型を [WebIDL] で定義されている通りにサポートしなければなりませんが、UI Eventsに適合するだけで [WebIDL]
で定義されているすべてのメソッドやデータ型をサポートする必要はありません)。
本仕様では、異なる user agent、仕様、コンテンツ著者向けに複数の適合クラスを定義しています:
1.2.1. Webブラウザおよびその他の動的または対話的な user agents
動的または対話的な user agent、ここでは「ブラウザ」と呼びます(Webブラウザ、AT(アクセシビリティ技術)アプリケーション、またはそれに類するプログラムなど)、は次の条件を満たす場合UI Eventsに適合します:
-
[DOM-Level-3-Core] で定義されているCoreモジュール
-
本仕様で定義されているすべてのインターフェイスおよびイベント、その関連メソッド、属性、および意味論(ただし deprecated と記されたものは除く。適合するuser agentは、後方互換性のためにdeprecatedなインターフェイス、イベント、APIを実装してもよいが、適合要件ではない)
-
[UIEvents-Key] および [UIEvents-Code] で定義されている
keyおよびcodeの全値(プラットフォームで利用可能な場合)、および -
本仕様で定義されているその他すべての規範的要件。
適合するブラウザは、条件が満たされたとき、適切な 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仕様記述慣例 に従っていますが、以下の追加事項があります:
-
キーに印字されている キーキャップ は
↓、=、Qといった形で表されます。これは、ユーザー視点でキーを参照する際に使用され、生成されるkeyやcodeの値は考慮しません。 -
文字を表すグリフは
"𣧂"のように示されます。 -
Unicode文字コードは
U+003dのように表記されます。 -
キー押下によって生成されるキー値名(すなわち
KeyboardEvent.keyの値)は"ArrowDown"、"="、"q"、"Q"のように示されます。 -
物理キーに関連付けられているキーコード名(すなわち
KeyboardEvent.codeの値)は"ArrowDown"、"Equal"、"KeyQ"のように示されます。
さらに、本仕様では特定の用語が特別な意味で用いられます。「実装」という用語は、本仕様を実装するブラウザ、コンテンツオーサリングツール、その他の user agent を指します。一方、コンテンツ著者は、本仕様で説明されているインターフェイス、メソッド、属性、イベント等を利用してWebアプリケーションを作成する人を指し、ユーザーはそのWebアプリケーションを実装上で利用する人です。
最後に:
これは注記です。
これは未解決の課題です。
これは警告です。
interface Example {
// This is an IDL definition.
};
3. 基本イベントインターフェイス
[DOM] で定義される基本的なイベントインターフェイスは、UI Eventsに不可欠です。これらの基本イベントインターフェイスは実装で常にサポートされなければなりません:
-
Eventインターフェイスおよび以下の定数、メソッド、属性:-
NONE定数 -
AT_TARGET定数 -
type属性 -
target属性 -
eventPhase属性 -
bubbles属性 -
cancelable属性 -
composed属性 -
timeStamp属性 -
isTrusted属性 -
stopPropagation()メソッド -
preventDefault()メソッド -
initEvent()メソッド
-
-
CustomEventインターフェイスおよび以下のメソッドと属性:-
initCustomEvent()メソッド -
detail属性
-
-
EventTargetインターフェイスおよび以下のメソッド:-
addEventListener()メソッド -
dispatchEvent()メソッド
-
-
EventListenerインターフェイスおよびhandleEvent()メソッド -
DocumentインターフェイスのcreateEvent()メソッド
本仕様で定義されるイベント型はこれらの基本インターフェイスから派生し、派生元のインターフェイスが持つすべての属性、メソッド、定数を継承しなければなりません。
以下の図は本仕様で記述されるインターフェイスの継承構造を示します。
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
| はい | イベントによって異なる: beforeinputやinputイベントのトリガー; 文字組み立てシステムの起動; blurおよびfocusイベント; keypress
イベント(サポートされる場合); アクティベーション動作; その他のイベント
|
keyup
| 同期 | はい | Element | KeyboardEvent
| はい | なし |
load
| 非同期 | いいえ | Window, Document, Element | Event
| いいえ | なし |
select
| 同期 | はい | Element | Event
| いいえ | なし |
unload
| 同期 | いいえ | Window, Document, Element | Event
| いいえ | なし |
本仕様で非推奨とされるイベント一覧については、ドキュメント末尾の 旧イベント型 付録を参照してください。
上記の表の解釈例:load イベントは、そのイベント向けに
Element ノード上でキャプチャおよびターゲットフェーズでイベントリスナーが発火します。このイベントはキャンセルできません。event listener が Window、Document、Element
ノード以外や、バブリングフェーズのみで登録された場合、この 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 = 0; };detail
UIEventInit . view- この値は、このイベントが発火されるグローバル環境の Window オブジェクトに初期化すべきです。このイベントが要素に対して発火される場合は、view プロパティはその要素の
ownerDocumentを含む Window オブジェクトに設定します。 UIEventInit . detail- この値はアプリケーション固有の数値で初期化されます。
3.2.2. UIEvent のアルゴリズム
3.2.2.1. UIEvent を初期化する
- 入力
-
event:初期化する
UIEventeventType:イベント型を含む DOMString
eventTarget:イベントの
EventTargetbubbles:このイベントがバブリングする場合は true
cancelable:このイベントがキャンセル可能な場合は true
- 出力
-
なし
-
基本となる
Event属性を初期化します:-
Event を初期化する を event, eventType, bubbles, cancelable で呼び出す
-
event.
targetに eventTarget を設定
-
-
以下の公開属性を初期化します:
-
以下の歴史的属性を初期化します:
-
event.
whichに 0 を設定する(MouseEventおよびKeyboardEventの両方で使用される)
-
3.2.3. UIEvent 型
ユーザーインターフェイスイベント型を以下に示します。これらのイベントの一部は、ユーザーインターフェイスから生成された場合 UIEvent
インターフェイスを使用しますが、詳細は各イベントごとに記載されています。
3.2.3.1. load
| 型 | load
|
|---|---|
| インターフェイス | UIEvent
(ユーザーインターフェイスから生成された場合)、それ以外は Event
|
| 同期 / 非同期 | 非同期 |
| バブリング | いいえ |
| 信頼できるターゲット | Window、Document、Element
|
| キャンセル可能 | いいえ |
| デフォルト動作 | なし |
| コンテキスト (信頼イベント) |
DOM実装がリソース(例:ドキュメント)および依存リソース(画像、スタイルシート、スクリプトなど)の読み込みを完了したとき、user
agent
はこのイベントを発火しなければなりません。依存リソースのロード失敗は、親リソースがDOM経由でアクセス可能であれば、このイベントの発火を妨げてはなりません。このイベント型が発火される場合、少なくとも
Document ノードでこのイベントを発火する必要があります。
旧来の理由により、ドキュメント内のリソース(例:画像)に対する load イベントは、HTML 実装では伝播パスに Window を含みません。詳細は [HTML5] を参照してください。
3.2.3.2. unload
| 型 | unload
|
|---|---|
| インターフェイス | UIEvent
(ユーザーインターフェイスから生成された場合)、それ以外は Event
|
| 同期 / 非同期 | 同期 |
| バブリング | いいえ |
| 信頼できるターゲット | Window、Document、Element
|
| キャンセル可能 | いいえ |
| デフォルト動作 | なし |
| コンテキスト (信頼イベント) |
DOM実装が環境からリソース(例:ドキュメント)や依存リソース(画像、スタイルシート、スクリプトなど)を除去したとき、user
agent はこのイベントを発火しなければなりません。このイベント型の発火後にドキュメントはアンロードされる必要があります。このイベント型が発火される場合、少なくとも
Document ノードでこのイベントを発火する必要があります。
3.2.3.3. abort
| 型 | abort
|
|---|---|
| インターフェイス | UIEvent
(ユーザーインターフェイスから生成された場合)、それ以外は Event
|
| 同期 / 非同期 | 同期 |
| バブリング | いいえ |
| 信頼できるターゲット | Window、Element
|
| キャンセル可能 | いいえ |
| デフォルト動作 | なし |
| コンテキスト (信頼イベント) |
リソースのロードが中断されたとき(例:ユーザーがロード中にキャンセルした場合)、user agent はこのイベントを発火しなければなりません。
3.2.3.4. error
| 型 | error
|
|---|---|
| インターフェイス | UIEvent
(ユーザーインターフェイスから生成された場合)、それ以外は Event
|
| 同期 / 非同期 | 非同期 |
| バブリング | いいえ |
| 信頼できるターゲット | Window、Element
|
| キャンセル可能 | いいえ |
| デフォルト動作 | なし |
| コンテキスト (信頼イベント) |
リソースのロードに失敗した場合や、ロードされたが意味的に解釈できない場合(例:不正な画像、スクリプト実行エラー、非整形式XMLなど)、user agent はこのイベントを発火しなければなりません。
3.2.3.5. select
| 型 | select
|
|---|---|
| インターフェイス | UIEvent
(ユーザーインターフェイスから生成された場合)、それ以外は Event
|
| 同期 / 非同期 | 同期 |
| バブリング | はい |
| 信頼できるターゲット | Element
|
| キャンセル可能 | いいえ |
| デフォルト動作 | なし |
| コンテキスト (信頼イベント) |
ユーザーがテキストを選択したとき、user agent はこのイベントを選択後に発火しなければなりません。
本仕様では選択されたテキストへのアクセスに関するコンテキスト情報は提供しません。該当する場合、ホスト言語は、ユーザーがどのように内容を選択できるか(国際的な言語慣習も考慮)、select
イベントがどのタイミングで発火されるか、コンテンツ著者がユーザー選択内容にどのようにアクセスできるかを定義するべきです。
ユーザー選択内容へアクセスするには、コンテンツ著者は ホスト言語のネイティブ機能(HTML 編集APIの Document.getSelection()
メソッドなど)を使用します。[Editing]
select イベントはすべての要素や言語で利用できるとは限りません。例えば [HTML5] では select イベントはフォームの
input
や
textarea
要素でのみ発火できます。
実装は、フォームコントロール外のテキスト選択や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を識別するために使用します。ネストされたブラウジングコンテキストとのセキュリティ上の理由から、入出時に関連する
EventTargetはnullであるべきです。この属性の 未初期化値 は
nullでなければなりません。
3.3.1.2. FocusEventInit
dictionary :FocusEventInit UIEventInit {EventTarget ?=relatedTarget null ; };
FocusEventInit . relatedTarget-
relatedTargetは、focusやfocusinイベントの場合はフォーカスを失う要素、blurやfocusoutイベントの場合はフォーカスを得る要素に初期化してください。
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つの区分があります:
-
OSフォーカスコンテキスト:コンピュータ上で現在実行中の複数のアプリケーションのいずれかにフォーカスがある可能性があります。そのうちフォーカスを持つアプリケーションとしてブラウザが含まれる場合があります。
-
ブラウザがフォーカスを持つ場合、ユーザーは(例:Tabキーで)アプリケーションフォーカスコンテキストをブラウザのUIフィールド(Webサイトのロケーションバー、検索フィールド等)間で切り替えることができます。そのUIフィールドの一つがタブ内のドキュメントである場合があります。
-
ドキュメント自体がフォーカスを持つ場合、ドキュメントフォーカスコンテキストはドキュメント内の任意のフォーカス可能要素に設定できます。
本仕様で定義されるイベント型はドキュメントフォーカスのみを対象にしており、イベント詳細で識別される 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 tonull-
InputEvent オブジェクトの
data属性を初期化します。 isComposing, of type boolean, defaulting tofalse-
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()
メソッドを Control、Shift、Alt、または Meta と共に使用するのと同等です。
インスタンスを作成するには KeyboardEvent
コンストラクタを使用し、オプションの KeyboardEventInit
辞書を渡します。
3.5.1.1. KeyboardEvent
[Exposed =Window ]interface :KeyboardEvent UIEvent {(constructor DOMString ,type optional KeyboardEventInit = {}); // KeyLocationCodeeventInitDict 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- キーのアクティベーションが左側のキー位置から発生したことを示します(当該キーに複数の位置がある場合)。
DOM_KEY_LOCATION_RIGHT- キーのアクティベーションが右側のキー位置から発生したことを示します(当該キーに複数の位置がある場合)。
DOM_KEY_LOCATION_NUMPAD-
キーのアクティベーションがテンキー上で発生したこと、またはテンキーに対応する仮想キーから発生したことを示します(当該キーに複数の位置がある場合)。なお、
NumLockキーは常にlocationとしてDOM_KEY_LOCATION_STANDARDを用いるべきです。 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-
trueはControl(コントロール)修飾キーが有効であったことを示します。未初期化値 は
falseでなければなりません。 shiftKey, of type boolean, readonly-
trueはShift修飾キーが有効であったことを示します。未初期化値 は
falseでなければなりません。 altKey, of type boolean, readonly-
trueはAlt(または"Option") 修飾キーが有効であったことを示します。未初期化値 は
falseでなければなりません。 metaKey, of type boolean, readonly-
trueはMeta修飾キーが有効であったことを示します。Macintosh システムでの
"Command"("⌘")キー修飾はこの修飾キーで表されます。未初期化値 は
falseでなければなりません。 repeat, of type boolean, readonly-
trueはキーが持続的に押されている場合を示します。キーを押し続けると、システム設定により決定される速度でkeydown、beforeinput、inputの各イベントがこの順序で繰り返されるべきです。スクリーン上のソフトウェアキーボードなど長押し動作(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 to0-
KeyboardEvent オブジェクトの
location属性を以下の数値定数のいずれかに初期化します:-
DOM_KEY_LOCATION_STANDARD(数値 0) -
DOM_KEY_LOCATION_LEFT(数値 1) -
DOM_KEY_LOCATION_RIGHT(数値 2) -
DOM_KEY_LOCATION_NUMPAD(数値 3)
-
repeat, of type boolean, defaulting tofalse-
KeyboardEvent オブジェクトの
repeat属性を初期化します。現在の KeyboardEvent が長押しによって引き起こされる繰り返し系列の一部と見なされる場合はtrue、そうでなければfalseを設定してください。 isComposing, of type boolean, defaulting tofalse-
KeyboardEvent オブジェクトの
isComposing属性を初期化します。この属性は、構築中のイベントが合成シーケンスの一部である場合にtrueに設定してください。そうでなければfalseにします。
keyCode、charCode、および which が含まれていました。
keyCode 属性はコンピュータキーボード上の特定のキーに対応する数値を示し、charCode
属性はそのキーに対応する文字の ASCII 値を示します(これは keyCode と同じである場合があります)。charCode
は文字値を生成するキーにのみ適用されます。
実際には、keyCode と charCode はプラットフォーム間や同一実装の異なる OS やロケールで一貫していません。本仕様は
keyCode や charCode の値や charCode の動作を定義しません。適合する UI Events
実装では、コンテンツ作者は代わりに key
と code
を使用できます。
詳細は、情報付録「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 MouseEvent
と KeyboardEvent
インターフェイスは一連のキーボード修飾子属性を共有し、追加の修飾子状態を取得する仕組みをサポートします。次の辞書は著者が
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 tofalse-
MouseEvent または KeyboardEvent オブジェクトの
ctrlKey属性を、Controlキー 修飾子が有効と見なされる場合はtrue、そうでない場合はfalseに初期化します。値が
trueの場合、実装はイベントオブジェクトのキー修飾子状態も初期化し、getModifierState()またはgetModifierState()にControlを渡した場合にtrueを返すようにしなければなりません。 shiftKey, of type boolean, defaulting tofalse-
MouseEvent または KeyboardEvent オブジェクトの
shiftKey属性を、Shiftキー修飾子が有効と見なされる場合はtrue、そうでない場合はfalseに初期化します。値が
trueの場合、実装はイベントオブジェクトのキー修飾子状態も初期化し、getModifierState()またはgetModifierState()にShiftを渡した場合にtrueを返すようにしなければなりません。 altKey, of type boolean, defaulting tofalse-
MouseEvent または KeyboardEvent オブジェクトの
altKey属性を、Alt(またはOption)キー修飾子が有効と見なされる場合はtrue、そうでない場合はfalseに初期化します。値が
trueの場合、実装はイベントオブジェクトのキー修飾子状態も初期化し、getModifierState()またはgetModifierState()にAltを渡した場合にtrueを返すようにしなければなりません。 metaKey, of type boolean, defaulting tofalse-
MouseEvent または KeyboardEvent オブジェクトの
metaKey属性を、Metaキー修飾子が有効と見なされる場合はtrue、そうでない場合はfalseに初期化します。値が
trueの場合、実装はイベントオブジェクトのキー修飾子状態も初期化し、getModifierState()またはgetModifierState()にMetaを渡した場合にtrueを返すようにしなければなりません。 modifierAltGraph, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
getModifierState()またはgetModifierState()にAltGraphを渡した場合にtrueを返すようにします。 modifierCapsLock, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
getModifierState()またはgetModifierState()にCapsLockを渡した場合にtrueを返すようにします。 modifierFn, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
getModifierState()またはgetModifierState()にFnを渡した場合にtrueを返すようにします。 modifierFnLock, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
getModifierState()またはgetModifierState()にFnLockを渡した場合にtrueを返すようにします。 modifierHyper, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
getModifierState()またはgetModifierState()にHyperを渡した場合にtrueを返すようにします。 modifierNumLock, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
getModifierState()またはgetModifierState()にNumLockを渡した場合にtrueを返すようにします。 modifierScrollLock, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
getModifierState()またはgetModifierState()にScrollLockを渡した場合にtrueを返すようにします。 modifierSuper, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
getModifierState()またはgetModifierState()にSuperを渡した場合にtrueを返すようにします。 modifierSymbol, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
getModifierState()またはgetModifierState()にSymbolを渡した場合にtrueを返すようにします。 modifierSymbolLock, of type boolean, defaulting tofalse-
イベントオブジェクトのキー修飾子状態を初期化し、
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 actions、
keyup イベントが発火される前に完了します。これにより
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
|
| キャンセル可能 | はい |
| 合成 | はい |
| デフォルトアクション | 可変: beforeinput と input イベント; テキスト合成システムの起動;
blur と focus イベント; keypress
イベント(サポートされている場合); アクティベーション動作; その他イベント
|
| コンテキスト (trusted events) |
|
ユーザーエージェントは、キーが押されているときにこのイベントを発火しなければなりません。
keydown
イベントタイプはデバイス依存であり、
入力デバイスの能力やOSでのマッピングに依存します。このイベントタイプは
キー割り当ての後で生成されなければなりません。またこのイベントタイプは
同じキーに関連する beforeinput,
input,
keyup イベントより前に発火されなければなりません。
keydown
イベントのデフォルトアクションはキーによって異なります:
-
キーが文字に関連付けられている場合、デフォルトアクションは
beforeinputイベントの発火、その後inputイベントの発火です。マクロや「デッドキー」など、複数文字に対応するキーの場合は、 各文字ごとにbeforeinput/inputイベントセットを発火しなければなりません -
キーが テキスト合成システムに関連付けられている場合は デフォルトアクションはそのシステムを起動することです
-
キーが
Tabキーの場合、デフォルトアクションは現在フォーカスされている要素(存在する場合)から新しいフォーカス要素へ ドキュメントのフォーカスを移すことです。詳細は フォーカスイベントタイプを参照してください。 -
キーが
Enterまたは(スペース)キーで、 現在フォーカスされている要素が状態変更要素の場合、デフォルトアクションはclickイベント、およびDOMActivateイベント(ユーザーエージェントが対応している場合)を発火することです。
このイベントがキャンセルされた場合、関連するイベントタイプは発火されず、関連アクションも実行されません。
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」という文章を手書き認識システムで合成する場合のイベントシーケンス例です(合成イベントとしてモデル化)。
| イベントタイプ | CompositionEventdata
| 注記 | |
|---|---|---|---|
| 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. 合成中のキーイベント
合成セッション中は keydown と keyup イベントは引き続き送信され、
これらは isComposing
属性を true に設定した状態で発火されなければなりません。
| イベントタイプ | KeyboardEventisComposing
| 注記 | |
|---|---|---|---|
| 1 | keydown
| false | 合成を開始するキーイベント |
| 2 | compositionstart
| ||
| 3 | compositionupdate
| ||
| 4 | keyup
| true | |
| ... | 合成セッション中に送信されるキーイベントは isComposing を true に設定する必要がある
| ||
| 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 更新が伴わないため、
beforeinput や
input イベントは送信すべきではありません。
| イベントタイプ | 注記 | |
|---|---|---|
| 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. キーボードイベントとキー値
このセクションではキーボードイベントに関する必要な情報を示します:
-
キーボードレイアウト・マッピング・キー値の説明。
-
キー間の関係(デッドキーや修飾キーなど)。
-
キーボードイベントとそのデフォルトアクションの関係。
-
key値の集合と、その集合の拡張方法の指針。
このセクションではセルビア語や漢字文字を使用しています。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.
key
とcodeの関係
keykey属性は、現在のキーボードレイアウト(IMEも含む。デッドキーは固有のkey値を持つ)を考慮したキーの意味を判定したい場合に使います。ユースケース例:修飾キー付きや修飾キー単体の検出(例:キーボードショートカットに反応するアクション)。codecode属性は、レイアウト変更無しでユーザーが押した物理キー自体を判定したい場合に使います。ユースケース例:WASDキー(ゲームの移動制御)やすべてのキーキャッチ(リモートデスクトップクライアントなど)。
4.2.3. codeの例
| キーボード配列 | KeyboardEventkey
| KeyboardEventcode
| 注記 |
|---|---|---|---|
| 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")を
正確に判別できます。
フランス配列の例では、Alt と AltGraph キーは
実際には1つしか存在しなくても、それぞれ左・右の位置を保持している点に注意してください。
| キーボード配列 | KeyboardEventkey
| KeyboardEventcode
| 注記 |
|---|---|---|---|
| US | "'"
| "Quote"
| |
| Japanese | ":"
| "Quote"
| |
| US Intl | "Dead"
| "Quote"
|
この例はデッドキー値が属性にどのようにエンコードされるかを示しています。
key
の値は
現在のロケールによって変化しますが、code
属性は
一貫性のある値を返します。
"2" キー(Shift有・無)の各種キーボード配列での取扱い
| キーボード配列 | KeyboardEventkey
| KeyboardEventcode
| 注記 |
|---|---|---|---|
| US | "2"
| "Digit2"
| |
| US | "@"
| "Digit2"
| shiftKey
|
| UK | "2"
| "Digit2"
| |
| UK | """
| "Digit2"
| shiftKey
|
| French | "é"
| "Digit2"
| |
| French | "2"
| "Digit2"
| shiftKey
|
現在のロケールや修飾キー状態に関わらず、USキーボードで "2" とラベルされたキーを押すと、
"Digit2" が
code
属性に必ず記録されます。
Shift と 2
次の2つのキーイベント列で属性値を比較してください。
USキーボードでは両方とも "@" 文字を生成しますが、キーが離される順序が異なります。
最初の列では順序は:Shift(押下), 2
(押下), 2(離す), Shift(離す)です。
| イベントタイプ | KeyboardEventkey
| KeyboardEventcode
| 注記 | |
|---|---|---|---|---|
| 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(離す)
となります。
| イベントタイプ | KeyboardEventkey
| KeyboardEventcode
| 注記 | |
|---|---|---|---|---|
| 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値を使う場合は「数字やファンクションキー(F4、F5など)をアルファベットの代わりに使うことを検討してください」([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キー値を持つキーが複数あり(通常はlocation
値DOM_KEY_LOCATION_LEFTとDOM_KEY_LOCATION_RIGHTで区別)、8キー値も複数あり(location
値DOM_KEY_LOCATION_STANDARDとDOM_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修飾キーをAlt と
Control の組み合わせで擬似的に実装しています。AltGraph修飾キーの直接利用が推奨されます。
U+0051)を生成するイベント列を示します:
| イベントタイプ | KeyboardEventkey
| 修飾キー | 注記 | |
|---|---|---|---|---|
| 1 | keydown
| "Shift"
| shiftKey
| |
| 2 | keydown
| "Q"
| shiftKey
| ラテン大文字Q |
| 3 | beforeinput
| |||
| 4 | input
| |||
| 5 | keyup
| "Q"
| shiftKey
| |
| 6 | keyup
| "Shift"
|
Shift キーが Q より先に離される場合のイベント列です。
Qキーの値は、keyup イベントではシフト無しの値になります:
| イベントタイプ | KeyboardEventkey
| 修飾キー | 注記 | |
|---|---|---|---|---|
| 1 | keydown
| "Shift"
| shiftKey
| |
| 2 | keydown
| "Q"
| shiftKey
| ラテン大文字Q |
| 3 | beforeinput
| |||
| 4 | input
| |||
| 5 | keyup
| "Shift"
| ||
| 6 | keyup
| "q"
| ラテン小文字q |
| イベントタイプ | KeyboardEventkey
| 修飾キー | 注記 | |
|---|---|---|---|---|
| 1 | keydown
| "Control"
| ctrlKey
| |
| 2 | keydown
| "v"
| ctrlKey
| ラテン小文字v |
beforeinput や input
イベントは発生しません。
| ||||
| 3 | keyup
| "v"
| ctrlKey
| ラテン小文字v |
| 4 | keyup
| "Control"
|
Shift と Control の両方を
押した場合のイベント列を示しています:
| イベントタイプ | KeyboardEventkey
| 修飾キー | 注記 | |
|---|---|---|---|---|
| 1 | keydown
| "Control"
| ctrlKey
| |
| 2 | keydown
| "Shift"
| ctrlKey,
shiftKey
| |
| 3 | keydown
| "V"
| ctrlKey,
shiftKey
| ラテン大文字V |
beforeinput や input
イベントは発生しません。
| ||||
| 4 | keyup
| "V"
| ctrlKey,
shiftKey
| ラテン大文字V |
| 5 | keyup
| "Shift"
| ctrlKey
| |
| 6 | keyup
| "Control"
|
| イベントタイプ | KeyboardEventkey
| 修飾キー | 注記 | |
|---|---|---|---|---|
| 1 | keydown
| "Control"
| ctrlKey
| |
| 2 | keydown
| "ر"
| ctrlKey
| アラビア文字 Reh |
beforeinput や input
イベントは発生しません。
| ||||
| 3 | keyup
| "ر"
| ctrlKey
| アラビア文字 Reh |
| 4 | keyup
| "Control"
|
keydownやkeyupイベントの値は、キー押下時の現在のキーボードレイアウトによって異なります。つまり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が推奨する表現となります。
| イベントタイプ | KeyboardEventkey
| KeyboardEventisComposing
| CompositionEventdata
| 注記 | |
|---|---|---|---|---|---|
| 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キー)にはならないことに注意してください。なぜなら、
この時点でユーザーエージェントに渡される値は既にデッドキー操作によって変更されているからです。
このプロセスは、ユーザーが(デッドキー押下後に)サポートされていない基底文字(アクティブなダイアクリティカル記号が利用できないもの)をタイプした場合、中断されることがあります:
| イベントタイプ | KeyboardEventkey
| KeyboardEventisComposing
| CompositionEventdata
| 注記 | |
|---|---|---|---|---|---|
| 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で対応しません。例えば、keydownでAcceptキー値を受け取っても、現在IMEで選択されているテキストが受理されたことを意味するわけではなく、単にキーストロークがあったことを示すだけです。IMEのAccept機能(多くのIMEではcompositionendイベントが発生)とは切り離されています。キーボードイベントだけでは入力メソッドエディタの現在状態は判断できません。状態はdata
属性(CompositionEvent
インターフェース)で取得します。さらに、IMEシステムやデバイスは機能やキー割り当てが異なり、ConvertやAcceptキーが他のキーで代用される場合もあります。キーボードイベントは、デバイスのキーボードレイアウトマッピング後に生成されるイベントに対応します。
一部の実装やシステム構成では、IMEによって一部のキーイベントや値が抑制される場合があります。
以下は、日本語入力方式を使ってUnicode文字"市"(漢字、CJK統合漢字)を生成するキーシーケンス例です。この例はIMEがアクティブで日本語ローマ字入力モードになっていることを前提とします。ConvertやAcceptキーは、使用デバイスやIME構成により他のキーで代用される場合もあり(例:スペースキーU+0020やEnter)。
"詩"(詩)と"市"(市)は同音異義語(いずれも「し」)のため、ユーザーはConvertキーで適切な候補を選択する必要があります。
| イベントタイプ | KeyboardEventkey
| KeyboardEventisComposing
| CompositionEventdata
| 備考 | |
|---|---|---|---|---|---|
| 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キー))で代用される場合があります。
| イベントタイプ | KeyboardEventkey
| KeyboardEventisComposing
| CompositionEventdata
| 備考 | |
|---|---|---|---|---|---|
| 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 イベントには影響しませんが、対応する beforeinput や
input(および keypress
がサポートされている場合)イベントの生成を防止する必要があります。次の例は、USキーボードでUSマッピングを使って Unicode文字Q(ラテン大文字Q)を生成する一連のキー操作を示しています。
| イベントタイプ | KeyboardEventkey
| InputEventdata
| 修飾キー | 注記 | |
|---|---|---|---|---|---|
| 1 | keydown
| "Shift"
| shiftKey
| ||
| 2 | keydown
| "Q"
| shiftKey
| デフォルト動作が阻止される(例:preventDefault()
を呼び出す)
| |
beforeinput や input
(および keypressがサポートされていれば)イベントは生成されません
| |||||
| 3 | keyup
| "Q"
| shiftKey
| ||
| 4 | keyup
| "Shift"
|
キーが修飾キーの場合でも、キーストロークは修飾キー状態の計算に必ず考慮されます。次の例もUSマッピングで ラテン大文字Q を生成する一連の操作です。
| イベントタイプ | KeyboardEventkey
| InputEventdata
| 修飾キー | 注記 | |
|---|---|---|---|---|---|
| 1 | keydown
| "Shift"
| shiftKey
| デフォルト動作が阻止される(例:preventDefault()
を呼び出す)
| |
| 2 | keydown
| "Q"
| shiftKey
| ||
| 3 | beforeinput
| "Q"
| |||
| 4 | input
| ||||
| 5 | keyup
| "Q"
| shiftKey
| ||
| 6 | keyup
| "Shift"
|
キーが複数キー操作列の一部(デッドキーや IME操作系列など)なら、デフォルト動作が keydown
イベントでキャンセルされた場合のみ、そのキーストロークは無視する(計算から除外する)必要があります。keyup イベントで デッドキーをキャンセルしても、beforeinput や input イベントには影響しません。下記例はフランス配列のキーボードでフランスマッピング、修飾キーなしでデッドキー
"Dead"(U+0302 サーカムフレックスアクセントキー)と "e"(U+0065、ラテン小文字eキー)を使用する操作例です:
| イベントタイプ | KeyboardEventkey
| InputEventdata
| 注記 | |
|---|---|---|---|---|
| 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 属性初期化
- 入力
-
event、
MouseEvent - 出力
-
なし
5.2.3. mousemove の PointerLock 属性設定
- 入力
-
event、
MouseEvent - 出力
-
なし
-
event.
typeが "mousemove" でない場合は終了 -
last mouse move が定義されていない場合は
-
それ以外の場合、
-
event.
movementX= event.screenX- last mouse move の x座標 -
event.
movementY= event.screenX- last mouse move の y座標
-
-
last mouse move = ( event.
screenX, event.screenY)
6. レガシーイベント初期化子
このセクションは規範的記述です。 以下の機能は既に廃止されており、レガシーソフトウェアとの互換性を必要とする ユーザーエージェントだけが実装すべきものです。
この仕様の初期バージョンでは、
インターフェイス上にイベント初期化メソッド(例:initMouseEvent)が含まれており、
多くの場合イベントオブジェクトの全属性を完全に初期化できない多数のパラメータを要求していました。
このため、基本のEvent
インターフェイスから派生したイベントインターフェイスでは、
派生インターフェイスのそれぞれの初期化子を明示的に呼び出して
イベントを完全初期化する必要がありました。
この標準の開発期間の長さもあり、いくつかの実装ではこの(現在は廃止された)初期化子に依存している場合があります。 完全性のために、これらレガシーイベント初期化子はこの付録で説明されています。
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 = 0); };detailArg
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 = 0,locationArg 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 asUIEvent.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
属性のみを用い、
charCode
や keyCode
属性は使用しないことが推奨されます。
ただしこれら機能の現状と規範イベント属性との関係を記録する目的で、 本セクションは説明的記述を記載します。 もし実装がこれらの属性やイベントをサポートする場合、本セクションの定義に従うことを推奨します。
7.1. レガシー UIEvent
補助インターフェイス
このセクションは規範外です
ユーザーエージェントは
which
属性を伝統的に備えており、
KeyboardEvent
や MouseEvent
の補助的イベント情報記録に利用されてきました。
以前は which
属性が
KeyboardEvent
や MouseEvent
に直接定義されていましたが、
現在は UIEvent
で共有される属性となっています。
7.1.1. インターフェイス UIEvent(補助)
部分 UIEvent
インターフェイスは UIEvent
インターフェイスの説明的拡張であり、which
属性を追加します。
partial interface UIEvent { // The following support legacy user agentsreadonly attribute unsigned long which ; };
which, 型 unsigned long(読み取り専用)-
MouseEventの場合、button+1 の値が入ります。KeyboardEventの場合、押されたキーの修飾無し識別子に対応するシステム/実装依存の数値コードが入ります。多くの場合、値はkeyCodeと同じです。
7.1.2. 辞書 UIEventInit(補助)
UIEvent
で which
をサポートするなら
UIEventInit
辞書にも以下メンバーを追加すべきです。
部分 UIEventInit
辞書は UIEventInit
辞書の説明的拡張であり、
which
メンバーを追加し、
属性初期化用に使えます。
partial dictionary UIEventInit {unsigned long which = 0; };
which, 型 unsigned long(初期値0)-
which属性をUIEventに初期化します。
7.2. レガシー KeyboardEvent
補助インターフェイス
このセクションは規範外です
キーボードのブラウザサポートは
keyCode、
charCode、
および
UIEvent
のwhich
という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 agentsreadonly attribute unsigned long charCode ;readonly attribute unsigned long keyCode ; };
charCode, 型 unsigned long(読み取り専用)-
charCodeはkeypressイベントで文字入力を生成した場合にその文字値を保持します。 値はその文字のUnicode参照番号(コードポイント)になります (例:印字文字ならevent.charCode = event.key.charCodeAt(0))。keydownやkeyupイベントでは値0となります。 keyCode, 型 unsigned long(読み取り専用)-
keyCodeは 押されたキーの修飾無し識別子に対応するシステム/実装依存の数値コードを保持します。key属性と異なり、値の集合はこの仕様では規範的に定義されません。 通常keyCodeの値は ASCII [RFC20][US-ASCII] または Windows 1252 [WIN1252] の10進コードポイントとなるべきですが、 他の適切な文字集合の場合もあります。 実装でキー識別不能な場合は0を用います。詳細は § 7.3 レガシーキーモデル を参照してください。
keyCodeの値判定方法について説明があります。
7.2.2. 辞書 KeyboardEventInit(補助)
KeyboardEvent
で keyCode
や charCode
をサポートするなら
KeyboardEventInit
辞書にも以下メンバーを追加すべきです。
部分 KeyboardEventInit
辞書は KeyboardEventInit
辞書の説明的拡張であり、
charCode
や keyCode
メンバーを追加し、
属性初期化用に使えます。
partial dictionary KeyboardEventInit { // The following support legacy user agentsunsigned long charCode = 0;unsigned long keyCode = 0; };
charCode, 型 unsigned long(初期値0)-
charCode属性をKeyboardEventにイベントの文字のUnicodeコードポイントで初期化します。 keyCode, 型 unsigned long(初期値0)-
keyCode属性をKeyboardEventに押されたキーの修飾無し識別子に対応するシステム/実装依存の数値コードで初期化します。
7.3. レガシーキーのモデル
このセクションは非規範的です
イベントタイプごとにこれら属性で公開される値は実装によって異なります。実装はkeyCode
プロパティで仮想キーコードと文字コードを両方公開してもよく(混合モデル)、またはkeyCode
とcharCode
を分離して報告する(分離モデル)こともあります。
7.3.1. keyCode
の算出方法(keydown/keyup)
keyCode
(keydown/keyup)は次のように算出します:
-
OSのイベント情報から仮想キーコードを読み取る(利用可能な場合)。
-
IMEがキー入力を処理しておりイベントが
keydownなら229を返す。 -
修飾なしで押下した場合に数字文字(0-9)を挿入するなら、その数字文字のASCIIコードを返す。
-
修飾なしで押下した場合にa-zの小文字を挿入するなら、対応する大文字のASCIIコードを返す。
-
OS・プラットフォーム向けのキーコード変換テーブルがあるなら、対応値を検索し、指定値があればそれを返す。
-
実装固有方法で判断したキー機能が§ 7.3.3 固定仮想キーコード表のキーに該当するなら、対応するキーコードを返す。
-
OSから仮想キーコードを返す。
-
キーコードが見つからなかった場合は0を返す。
7.3.2.
keyCode
の算出方法(keypress)
keyCode
(keypress)は次のように算出します:
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
| はい | はい | 可変: テキスト合成システムの起動; blur と focus イベント; DOMActivate イベント; その他イベント
|
textInput
| 同期 | はい | Element
| TextEvent
| はい | はい | 定義を参照 |
8.1.
レガシー UIEvent
イベント
8.1.1.
レガシー UIEvent
イベントタイプ
8.1.1.1. DOMActivate
| タイプ | DOMActivate
|
|---|---|
| インターフェイス | UIEvent
|
| 同期 / 非同期 | 同期 |
| バブル | はい |
| 信頼できるターゲット | Element
|
| キャンセル可能 | はい |
| 合成 | はい |
| デフォルトアクション | なし |
| コンテキスト (trusted events) |
ユーザー エージェントは、ボタン、リンク、またはその他の状態変更要素が活性化されたときにこのイベントを発火しなければなりません。
DOMActivate
イベントタイプは参照と完全性のために本仕様で定義されていますが、
本仕様はこのイベントタイプの使用を関連するイベントタイプ
click の使用に置き換えることを非推奨とします。他の仕様は後方互換のために独自に
DOMActivate
イベントタイプを定義・維持する場合があります。
DOMActivate と click は完全に同等ではありませんが、
実装上の挙動は、click のイベントタイプが、DOMActivate の設計時に想定された重要なアクセシビリティ要件を包含するように発展しており、
より広く実装されています。コンテンツ作者は、最大のアクセシビリティを確保するために関連する click イベントタイプを使用し、関連する mousedown や mouseup イベントタイプの代わりに利用することを推奨します。
もし実装が 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
|
| キャンセル可能 | はい |
| 合成 | はい |
| デフォルトアクション | 可変:
テキスト合成システムの起動;
blur と focus イベント;
DOMActivate イベント;
その他イベント
|
| コンテキスト (trusted events) |
|
もしユーザーエージェントがこのイベントをサポートするなら、
このイベントはキーが押されたときに(そのキーが通常文字値を生成する場合に限り)発火されなければなりません。
keypress
イベントタイプはデバイス依存であり、
入力デバイスの能力や OS 上でのマッピングに依存します。
このイベントタイプは キー割り当て の後で生成されなければなりません。 入力方式エディタ を使用している場合は発火してはなりません。
もしこのイベントがキャンセルされた場合、input
イベントの発火を防ぐべきであり、加えてデフォルト動作もキャンセルされるべきです。
作者は beforeinput
イベントを keypress
イベントの代わりに使用するべきです。
keypress
イベントは伝統的に物理キーではなく
文字値の検出に関連付けられており、一部の構成ではすべてのキーで利用できない場合があります。
keypress イベントタイプは
参照と完全性のために本仕様で定義されていますが、本仕様はこのイベントタイプの使用を非推奨とします。編集コンテキストでは、代わりに beforeinput を購読することができます。
8.3.2.
keypress イベント順序
keypress イベントタイプは、
同一キーに関連する keydown
イベントの後かつ
keyup イベントの前に発火されなければなりません。
keypress イベントタイプは、
同一キーに関連する beforeinput イベントの後かつ
input イベントの前に発火されなければなりません。
keypress
イベントをサポートするユーザーエージェントでのキーイベント列は、次の例で示されます:
| Event Type | KeyboardEventkey
| InputEventdata
| 注記 | |
|---|---|---|---|---|
| 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 = "undefined"); };data
詳しくは UI Events Algorithms の Text Event セクション を参照してください。TextEvent
インターフェイスおよび textInput
イベントについて。
9. イベントの拡張
このセクションは非規範的です
9.1. はじめに
本現行標準は複数のインターフェースや多くのイベントを定義しますが、あらゆる用途に対して網羅的なイベントセットではありません。コンテンツ著者や実装者が必要な機能を追加できるよう、本現行標準では競合なくインターフェースとイベントを拡張するための2つの仕組みを提供します:カスタムイベントと実装固有拡張です。
9.2. カスタムイベント
スクリプト著者が、アプリケーションを機能コンポーネント単位で定義し、そのアーキテクチャに意味のあるイベント型を利用したい場合があります。コンテンツ著者はCustomEvent
インターフェースを使って、利用している抽象レベルに適した独自イベントを生成できます。
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アプリケーションがerrorやloadイベントを監視して、ローカルシステムからアクセス可能な他のコンピュータや開いているポートを特定し、後続攻撃の準備が可能となります。
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
-
本仕様の文脈では、author、content 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の値(例:deltaX、deltaY、またはdeltaZ属性)は、現在のdeltaModeプロパティの文脈で解釈されるべきである。ホイール(または他の装置)の物理的な移動と、deltaが正か負かの関係は、環境および装置によって異なる。しかし、ユーザーエージェントがスクロールをdefault actionとして行う場合、deltaの符号は右手座標系によって与えられ、正のX,Y,Z軸はそれぞれ文書の右端、下端、および(ユーザーから離れる)奥行き方向を向く。 - deprecated
-
deprecatedとマークされた機能は、古い実装や仕様への参照として仕様に含まれているが、任意であり推奨されない。置き換えが存在するか進行中である機能のみが本仕様でdeprecatedにされなければならない。既にその機能をサポートしていない実装は、既存のコンテンツとの後方互換性の理由でdeprecated機能を実装してもよいが、コンテンツ作成者はユースケースを解決する他の方法がない場合を除きdeprecated機能を使用すべきではない。他の仕様が本仕様を参照する際、deprecated機能を使用すべきではなく、代わりにその機能が推奨外とされる置き換えを指すべきである。本仕様でdeprecatedとマークされた機能は将来の仕様から削除されることが予想される。
- empty string
-
空文字列は長さ
0のDOMString型の値であり、すなわち文字(印字可能な文字や制御文字を含まない)を一切含まない文字列です。 - 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イベントタイプは、blurやloadのようなイベントタイプとは異なる特性を持つ。イベントタイプはイベントオブジェクト上のtype属性として公開される。また、"event"(例:keydownevent)のように緩やかに言及されることもある。 - 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 key(
Shift、Altなど)やdead key状態を考慮した後の結果である。 - key value
-
key valueはcharacter valueまたは複数文字の文字列(例:
"Enter"、"Tab"、または"MediaTrackNext")で、特定の状態にあるキーに関連付けられる。すべてのキーはkey valueを持ち、character valueを持つかどうかにかかわらない。これには制御キー、ファンクションキー、modifier keys、dead keys、およびその他のキーが含まれる。任意の時点でのあるキーのkey valueはkey mappingに依存する。 - modifier key
-
modifier keyはキーの通常の動作を変更するキーであり、例えば(
Shiftキーのように)異なる大文字の文字を生成したり、(FnやAltキーのように)キーがトリガーする機能を変更したりする。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 (Ll、 Lm、 Lo、 Lt、 Lu)、 Number (Nd、 Nl、 No)、 Punctuation (Pc、 Pd、 Pe、 Pf、 Pi、 Po、 Ps)およびSymbol (Sc、 Sk、 Sm、 So)カテゴリ値が含まれる。
- un-initialized value
-
イベント属性(例:
bubblesやcurrentTarget)がinitEvent()で初期化される前の値。un-initialized valuesは、createEvent()メソッドを使用して新しいイベントが作成された直後に適用される。