1. 소개
1.1. 개요
UI Events는 두 가지 주요 목표로 설계되었습니다. 첫 번째 목표는 event 시스템의 설계로, event listeners 등록을 허용하고 이벤트가 트리 구조를 통해 흐르는 방식을 설명합니다. 또한 이 명세서는 사용자 인터페이스 제어 및 문서 변이 알림을 위한 표준 이벤트 모듈과 각 이벤트 모듈에 대한 정의된 컨텍스트 정보를 제공합니다.
UI Events의 두 번째 목표는 기존 브라우저에서 사용되는 현재 이벤트 시스템의 공통 부분 집합을 제공하는 것입니다. 이는 기존 스크립트와 콘텐츠의 상호운용성을 촉진하기 위함입니다. 이 목표가 완전한 하위 호환성으로 달성될 것으로 기대되지는 않으나, 명세서는 가능할 때마다 이를 달성하려고 시도합니다.
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. 웹 브라우저 및 기타 동적 또는 상호작용 user agent
동적 또는 상호작용 user agent는 여기서 브라우저
로 언급되며 (웹 브라우저, AT(접근성 기술) 애플리케이션, 기타 유사한
프로그램 포함), 다음을 지원하는 경우 UI Events에 적합합니다:
-
[DOM-Level-3-Core]에 정의된 Core 모듈
-
이 명세서에서 정의된 모든 인터페이스와 이벤트의 관련 메서드, 속성, 의미(단, deprecated로 표시된 항목은 제외, 적합한 user agent는 하위 호환성을 위해 deprecated 인터페이스, 이벤트, API를 구현할 수 있으나, 적합성을 위해 반드시 구현해야 하는 것은 아님)
-
플랫폼의 가용성에 따라 [UIEvents-Key] 및 [UIEvents-Code]에서 정의된
key및code값 전체, 그리고 -
이 명세서에 정의된 그 밖의 모든 규범적 요구 사항.
적합한 브라우저는 dispatch 메커니즘을 이용하여
해당 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. 콘텐츠 작성자 및 콘텐츠
콘텐츠 author는 해당 콘텐츠가 이 명세서에서 정의된 방식과 일관되게 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값과 관계없이 키를 참조할 때 사용됩니다. 이벤트가 생성된KeyboardEvent값과 상관없습니다. -
문자를 나타내는 글리프는 다음과 같이 표시됩니다:
"𣧂". -
유니코드 문자 인코딩은 다음과 같이 표시됩니다:
U+003d. -
키 입력에 의해 생성된 키 값의 이름(즉,
KeyboardEvent.key값)은 다음과 같이 표시됩니다:"ArrowDown","=","q"또는"Q". -
물리적 키에 해당하는 키 코드의 이름(즉,
KeyboardEvent.code값)은 다음과 같이 표시됩니다:"ArrowDown","Equal"또는"KeyQ".
또한, 이 명세서에서 특정 용어는 특별한 의미로 사용됩니다. 구현(implementation)
은 브라우저, 콘텐츠 저작 도구 또는 이 명세서를 구현하는 기타 user
agent를 의미하며,
콘텐츠 작성자(content author)는 이 명세서에서 설명된 인터페이스, 메서드, 속성, 이벤트 및 기타 기능을 활용하여 웹 애플리케이션을 작성하는 사람입니다. 사용자는 해당 웹
애플리케이션을 구현(implementation)에서 사용하는 사람을 의미합니다.
마지막으로:
이것은 참고 사항입니다.
이것은 열린 이슈입니다.
이것은 경고입니다.
interface Example {
// This is an IDL definition.
};
3. 기본 이벤트 인터페이스
[DOM]에서 정의된 기본 이벤트 인터페이스는 UI Events의 근간이 됩니다. 이러한 기본 이벤트 인터페이스는 구현에서 반드시 항상 지원되어야 합니다:
-
Event인터페이스와 다음 상수, 메서드 및 속성:-
NONE상수 -
AT_TARGET상수 -
type속성 -
target속성 -
eventPhase속성 -
bubbles속성 -
cancelable속성 -
composed속성 -
timeStamp속성 -
isTrusted속성 -
preventDefault()메서드 -
initEvent()메서드
-
-
CustomEvent인터페이스와 다음 메서드 및 속성:-
detail속성
-
EventTarget인터페이스와 다음 메서드들:-
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
이벤트(지원 시); activation behavior; 기타 이벤트
|
keyup
| 동기 | 예 | Element | KeyboardEvent
| 예 | 없음 |
load
| 비동기 | 아니오 | Window, Document, Element | Event
| 아니오 | 없음 |
select
| 동기 | 예 | Element | Event
| 아니오 | 없음 |
unload
| 동기 | 아니오 | Window, Document, Element | Event
| 아니오 | 없음 |
이 명세서에서 deprecated로 지정된 이벤트 목록은 문서 마지막의 레거시 이벤트 타입 부록을 참조하세요.
위 표를 해석하는 한 가지
방법: load 이벤트는 해당 이벤트에 대해
Element 노드에 연결된 이벤트
리스너를 캡처 및 타겟 단계에서 트리거합니다. 이 이벤트는 취소할 수 없습니다. 이벤트
리스너가 load 이벤트에 대해 Window, Document, 또는 Element 노드가 아닌 노드에 연결되어 있거나
버블링 단계에만 연결되어 있는 경우,
해당 이벤트 리스너는 트리거되지 않습니다.
위 표를 나열된 이벤트 타입에 대한 결정적인 것으로 해석하지 마세요.
예를 들어, load 이벤트는 다른 명세서(예:
XMLHttpRequest)에서도 사용됩니다. 마찬가지로, dispatchEvent()
는
모든 EventTarget을
구현하는 객체의 리스너에 신뢰할 수 없는 이벤트도 발생시킬 수 있습니다.
위에서 설명한 이벤트 타입과 관련된 이벤트 객체에는 추가적인 컨텍스트 정보가 포함되어 있습니다. 자세한 내용은 DOM 인터페이스 설명을 참조하세요.
3.2. 사용자 인터페이스 이벤트
사용자 인터페이스 이벤트 모듈은 사용자 인터페이스 및 문서 조작과 관련된 기본 이벤트 타입을 포함합니다.
3.2.1. UIEvent 인터페이스
DOM Level 2에서 도입됨
UIEvent
인터페이스는 사용자 인터페이스 이벤트와 관련된 특정 컨텍스트 정보를 제공합니다.
UIEvent
인터페이스의 인스턴스를 생성하려면, 선택적으로 UIEventInit
딕셔너리를 UIEvent 생성자에 전달하세요.
새로 정의된 이벤트의 경우, 단순히 사용자 인터페이스와 관련이 있다고 해서 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.
which= 0 으로 설정 (MouseEvent와KeyboardEvent모두에서 사용됨 )
-
3.2.3. UIEvent 타입
사용자 인터페이스 이벤트 타입들은 아래에 나열되어 있습니다. 이들 중 일부 이벤트는 사용자 인터페이스에서 생성된 경우 UIEvent
인터페이스를 사용하지만, 그렇지 않은 경우 각 이벤트 설명대로 Event
인터페이스를 사용합니다.
3.2.3.1. load
| 타입 | load
|
|---|---|
| 인터페이스 | UIEvent
(사용자 인터페이스에서 생성된 경우), Event
(그 외)
|
| 동기 / 비동기 | 비동기 |
| 버블링 | 아니오 |
| 신뢰할 수 있는 타겟 | Window, Document,
Element
|
| 취소 가능 | 아니오 |
| 기본 동작 | 없음 |
| 컨텍스트 (신뢰된 이벤트) |
user
agent는 DOM 구현이 리소스(예: 문서)와 종속 리소스(이미지, 스타일시트, 스크립트 등)를 모두 로드 완료했을 때 이 이벤트를 반드시 디스패치해야 합니다. 종속
리소스가 로드에 실패하더라도, 해당 리소스를 로드한 객체가 DOM에서 접근 가능하다면 이 이벤트가 발생되는 것을 막아서는 안 됩니다. 이 이벤트 타입이 디스패치될 경우, 구현체는 반드시
Document 노드에서 최소한 이 이벤트를 디스패치해야 합니다.
레거시 이유로, 문서 내부 리소스(예: 이미지)에 대한 load 이벤트는 HTML 구현에서 Window가 전파 경로에 포함되지 않습니다.
자세한 내용은 [HTML5]를 참조하세요.
3.2.3.2. unload
| 타입 | unload
|
|---|---|
| 인터페이스 | UIEvent
(사용자 인터페이스에서 생성된 경우), Event
(그 외)
|
| 동기 / 비동기 | 동기 |
| 버블링 | 아니오 |
| 신뢰할 수 있는 타겟 | Window, Document,
Element
|
| 취소 가능 | 아니오 |
| 기본 동작 | 없음 |
| 컨텍스트 (신뢰된 이벤트) |
user
agent는 DOM 구현이 환경에서 리소스(예: 문서) 또는 종속 리소스(이미지, 스타일시트, 스크립트 등)를 제거할 때 이 이벤트를 반드시 디스패치해야 합니다. 문서는 이
이벤트 타입이 디스패치된 후 반드시 언로드되어야 합니다. 이 이벤트 타입이 디스패치될 경우, 구현체는 반드시 Document 노드에서 최소한 이 이벤트를
디스패치해야 합니다.
3.2.3.3. abort
| 타입 | abort
|
|---|---|
| 인터페이스 | UIEvent
(사용자 인터페이스에서 생성된 경우), Event
(그 외)
|
| 동기 / 비동기 | 동기 |
| 버블링 | 아니오 |
| 신뢰할 수 있는 타겟 | Window, Element
|
| 취소 가능 | 아니오 |
| 기본 동작 | 없음 |
| 컨텍스트 (신뢰된 이벤트) |
user agent는 리소스 로딩이 중단된 경우(예: 사용자가 로딩 중에 취소한 경우) 이 이벤트를 반드시 디스패치해야 합니다.
3.2.3.4. error
| 타입 | error
|
|---|---|
| 인터페이스 | UIEvent
(사용자 인터페이스에서 생성된 경우), Event
(그 외)
|
| 동기 / 비동기 | 비동기 |
| 버블링 | 아니오 |
| 신뢰할 수 있는 타겟 | Window, Element
|
| 취소 가능 | 아니오 |
| 기본 동작 | 없음 |
| 컨텍스트 (신뢰된 이벤트) |
user agent는 리소스가 로드에 실패했거나, 로드되었지만 해당 의미에 따라 해석할 수 없는 경우(예: 잘못된 이미지, 스크립트 실행 오류, 비정형 XML 등) 이 이벤트를 반드시 디스패치해야 합니다.
3.2.3.5. select
| 타입 | select
|
|---|---|
| 인터페이스 | UIEvent
(사용자 인터페이스에서 생성된 경우), Event
(그 외)
|
| 동기 / 비동기 | 동기 |
| 버블링 | 예 |
| 신뢰할 수 있는 타겟 | Element
|
| 취소 가능 | 아니오 |
| 기본 동작 | 없음 |
| 컨텍스트 (신뢰된 이벤트) |
user agent는 사용자가 텍스트를 선택할 때 반드시 이 이벤트를 디스패치해야 합니다. 이 이벤트는 선택이 완료된 다음에 디스패치됩니다.
이 명세서는 선택된 텍스트를 접근할 수 있는 컨텍스트 정보를 제공하지 않습니다. 해당되는 경우 호스트 언어는 사용자가 콘텐츠를 선택하는 방법(국제 언어 관례를 고려), select 이벤트가 언제 디스패치되는지, 콘텐츠 작성자가 선택된 콘텐츠에 어떻게
접근할 수 있는지에 대한 규칙을 정의해야 합니다.
콘텐츠 작성자는 사용자가 선택한 콘텐츠에 접근하기 위해 호스트 언어의 고유 기능(예: HTML Editing APIs의
Document.getSelection() 메서드 [Editing])을 사용할 수 있습니다.
select 이벤트는 모든 요소와 모든 언어에서 항상 사용 가능한 것은 아닙니다. 예를 들어, [HTML5]에서는 select 이벤트가
폼
input
및
textarea
요소에서만 디스패치될 수 있습니다.
구현체는 폼 컨트롤 외부의 텍스트 선택, 이미지 또는 SVG와 같은 마크업 선택 등 적절하다고 판단되는 모든 컨텍스트에서 select 이벤트를 디스패치할 수 있습니다.
3.3. 포커스 이벤트
이 인터페이스와 관련된 이벤트 타입 및 § 3.3.2 포커스 이벤트 순서는 User Agent Accessibility Guidelines 2.0 [UAAG20]의 개념과 지침에 따라 설계되었으며, 특히 포커스 메커니즘과 포커스에 대한 용어집 항목에 주목하였습니다.
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-
Focus 이벤트와 관련된 두 번째
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
| 두 번째 타겟 요소가 포커스를 받을 때 전송됨 |
| 6 | focusin
| focus 이벤트 이후 발생 |
이 명세서는 focus() 혹은 blur()와 같은 메서드로 상호작용할 때의 포커스 이벤트
동작을 정의하지 않습니다. 해당 메서드가 정의된 관련 명세를 참조하세요.
3.3.3. 문서 포커스와 포커스 컨텍스트
이 이벤트 모듈에는 문서 포커스 변경 알림을 위한 이벤트 타입이 포함되어 있습니다. 이와 관련하여 세 가지 구분되는 포커스 컨텍스트가 있습니다:
-
운영체제 포커스 컨텍스트: 현재 컴퓨터에서 실행 중인 여러 애플리케이션 중 하나에 포커스가 있을 수 있습니다. 이 중 포커스된 애플리케이션이 브라우저일 수 있습니다.
-
브라우저가 포커스를 가진 경우, 사용자는 탭 키 등으로 애플리케이션 포커스 컨텍스트를 브라우저의 다양한 UI 필드(예: 웹사이트 주소 입력창, 검색창 등)로 전환할 수 있습니다. 이 중 하나가 탭에서 보여지고 있는 문서일 수 있습니다.
-
문서 자체가 포커스를 가진 경우, 문서 포커스 컨텍스트는 문서 내부의 포커스 가능한 아무 요소로 설정될 수 있습니다.
이 명세에서 정의된 이벤트 타입은 오직 문서 포커스만 다루며, 이벤트 세부 정보에서 식별된 event target은 반드시 문서나 해당 창의 문서 내의 일부여야 하며, 브라우저나 운영체제의 일부가 되어서는 안 됩니다. 포커스 컨텍스트 간 전환 시에도 마찬가지입니다.
일반적으로 문서에는 항상 포커스된 요소(문서 요소 자체일 수도 있음)와 지속적인 포커스 링이 존재합니다. 포커스 컨텍스트를 전환해도 문서의 현재 포커스된 요소와 포커스 링은 보통 유지됩니다. 예를 들어, 문서에 포커스 가능한 요소가 3개 있고 두 번째 요소에 포커스가 있을 때, 사용자가 운영체제 포커스를 다른 애플리케이션으로 옮겼다가 다시 브라우저로 돌아오면, 두 번째 요소가 여전히 문서 내에서 포커스를 유지하며, 탭 키로 세 번째 요소로 포커스를 이동할 수 있습니다. 호스트 언어는 포커스를 받을 수 있는 요소, 포커스를 받을 수 있는 조건, 포커스를 변경하는 방법, 포커스 변경 순서 등을 구체적으로 정의할 수 있습니다. 예를 들어, 어떤 경우에는 포인터를 이동하여 포커스를 줄 수 있고, 다른 경우에는 마우스 클릭이 필요할 수 있습니다. 일부 요소는 포커스를 받을 수 없으며, 일부는 특정 방법(요소 클릭)으로만 포커스를 받을 수 있고, 탭 키로는 불가능할 수도 있습니다. 문서는 여러 개의 포커스 링을 가질 수 있습니다. 다른 명세에서는 이 명세보다 더 복잡한 포커스 모델(예: 여러 요소가 동시에 현재 포커스를 가질 수 있음)을 정의할 수 있습니다.
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, 형식: USVString, 읽기 전용, 널 허용-
data는 입력 방법에 의해 생성된 문자의 값을 담습니다. 이는 단일 유니코드 문자이거나 비어 있지 않은 유니코드 문자 시퀀스일 수 있습니다 [Unicode]. 문자들은 Unicode 정규화 형식 NFC에 정의된 대로 정규화되어야 합니다 [UAX15]. 이 속성은 빈 문자열을 포함할 수도 있습니다.이 속성의 초기화되지 않은 값은 반드시
null이어야 합니다. isComposing, 형식: boolean, 읽기 전용-
이 입력 이벤트가 composition 세션의 일부로 발생한 경우(즉,
compositionstart이벤트 이후이고 해당하는compositionend이벤트 이전인 경우)true입니다.이 속성의 초기화되지 않은 값은 반드시
false이어야 합니다. inputType, 형식: DOMString, 읽기 전용-
inputType은 이벤트와 관련된 입력의 유형을 식별하는 문자열을 포함합니다.이 속성의 유효한 값 목록은 [Input-Events] 명세를 참조하세요.
이 속성의 초기화되지 않은 값은 빈 문자열
""이어야 합니다.
3.4.1.2. InputEventInit
dictionary :InputEventInit UIEventInit {DOMString ?data =null ;boolean isComposing =false ;DOMString inputType = ""; };
data, 형식: DOMString, 널 허용, 기본값null-
InputEvent 객체의
data속성을 초기화합니다. isComposing, 형식: boolean, 기본값false-
InputEvent 객체의
isComposing속성을 초기화합니다. inputType, 형식: DOMString, 기본값""-
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를 사용하는 예제는 키보드 이벤트 및 키 값를 참조하세요. 문자 생성 장치에 따라 키보드 이벤트가 생성되지 않을 수 있습니다.
키보드 이벤트는 텍스트 입력을 제공하는 한 가지 방식일 뿐입니다. 편집 시나리오에서는 키보드 이벤트의 대안으로(또는 추가적으로) InputEvent를
사용하는 것을 고려하세요.
3.5.1. KeyboardEvent 인터페이스
이 명세에서 도입됨
The KeyboardEvent
interface provides specific contextual information
associated with keyboard devices. Each keyboard event references a key
using a value. Keyboard events are commonly directed at the element that
has the focus.
The KeyboardEvent
interface provides convenient attributes for some
common modifiers keys: ctrlKey,
shiftKey,
altKey,
metaKey.
These attributes are equivalent to using the
method getModifierState()
with Control,
Shift, Alt, or Meta
respectively.
To create an instance of the KeyboardEvent
interface, use the
KeyboardEvent
constructor, passing an optional
KeyboardEventInit
dictionary.
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, 형식: DOMString, 읽기 전용-
key는 눌린 키에 대응하는 key attribute value를 담습니다.key속성은 레거시keyCode속성과 관련이 없으며 동일한 값 집합을 가지지 않습니다.이 속성의 초기화되지 않은 값은 반드시 빈 문자열
""이어야 합니다. code, 형식: DOMString, 읽기 전용-
code는 눌린 물리적 키를 식별하는 문자열을 담습니다. 이 값은 현재 키보드 레이아웃이나 수정자 상태에 영향을 받지 않으므로 특정 키는 항상 동일한 값을 반환합니다.이 속성의 초기화되지 않은 값은 반드시 빈 문자열
""이어야 합니다. location, 형식: unsigned long, 읽기 전용-
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, 형식: boolean, 읽기 전용-
true이면Control키(컨트롤) 수정자가 활성화된 상태입니다.이 속성의 초기화되지 않은 값은 반드시
false이어야 합니다. shiftKey, 형식: boolean, 읽기 전용-
true이면Shift키 수정자가 활성화된 상태입니다.이 속성의 초기화되지 않은 값은 반드시
false이어야 합니다. altKey, 형식: boolean, 읽기 전용-
true이면Alt(또는"Option") 키 수정자가 활성화된 상태입니다.이 속성의 초기화되지 않은 값은 반드시
false이어야 합니다. metaKey, 형식: boolean, 읽기 전용-
true이면Meta키 수정자가 활성화된 상태입니다.Macintosh 시스템에서
"Command"("⌘") 키 수정자는 이 수정자로 표현됩니다.이 속성의 초기화되지 않은 값은 반드시
false이어야 합니다. repeat, 형식: boolean, 읽기 전용-
true이면 키가 지속적으로 눌려져 반복되고 있음을 나타냅니다. 키를 누르고 있으면 시스템 구성에 따라keydown,beforeinput,input이벤트가 이 순서로 반복되어야 합니다. 화면 기반 입력 장치의 소프트웨어 키보드와 같은 모바일 장치에서 long-key-press 동작이 있는 경우,repeat속성 값이true인 첫 번째 키 이벤트는 long-key-press의 표시로 간주되어야 합니다. 반복이 시작되기까지 필요한 시간은 구성에 따라 다릅니다.이 속성의 초기화되지 않은 값은 반드시
false이어야 합니다. isComposing, 형식: boolean, 읽기 전용-
이 키 이벤트가 composition 세션의 일부로 발생한 경우(즉,
compositionstart이벤트 이후이고 해당하는compositionend이벤트 이전인 경우)true입니다.이 속성의 초기화되지 않은 값은 반드시
false이어야 합니다. getModifierState(keyArg)-
키 값을 사용하여 수정자의 상태를 쿼리합니다.
리턴 값은 해당 키가 수정자 키이고 그 수정자가 활성화된 경우
true, 그렇지 않으면false입니다.- DOMString keyArg
-
수정자 키 값입니다. 유효한 수정자
키는 Modifier Keys table에 정의되어 있습니다.
애플리케이션이 오른쪽과 왼쪽 수정자를 구별하려는 경우, 이 정보는 키보드 이벤트와
location을 사용하여 유추할 수 있습니다.
3.5.1.2. KeyboardEventInit
dictionary :KeyboardEventInit EventModifierInit {DOMString key = "";DOMString code = "";unsigned long location = 0;boolean repeat =false ;boolean isComposing =false ; };
key, 형식: DOMString, 기본값""-
KeyboardEvent 객체의
key속성을 초기화합니다. 이 값은 수정자(예: shift 상태)를 고려한 후 키의 의미를 나타내는 유니코드 문자열입니다. 출력 가능한 문자가 아닌 경우, [UIEvents-Key]에 정의된 키 값 중 하나여야 합니다. code, 형식: DOMString, 기본값""-
KeyboardEvent 객체의
code속성을 초기화합니다. 이 값은 키보드 레이아웃과 같은 수정자를 무시하고 눌린 물리적 키를 나타내는 유니코드 문자열입니다. 이 값은 [UIEvents-Code]에 정의된 코드 값 중 하나여야 합니다. location, 형식: unsigned long, 기본값0-
KeyboardEvent 객체의
location속성을 다음 위치 숫자 상수 중 하나로 초기화합니다:-
DOM_KEY_LOCATION_STANDARD(숫자 값 0) -
DOM_KEY_LOCATION_LEFT(숫자 값 1) -
DOM_KEY_LOCATION_RIGHT(숫자 값 2) -
DOM_KEY_LOCATION_NUMPAD(숫자 값 3)
-
repeat, 형식: boolean, 기본값false-
KeyboardEvent 객체의
repeat속성을 초기화합니다. 이 속성은 현재 KeyboardEvent가 단일 키의 장시간 누름으로 인해 발생한 반복 시퀀스의 일부로 간주되는 경우true로 설정되어야 하고, 그렇지 않으면false로 설정되어야 합니다. isComposing, 형식: boolean, 기본값false-
KeyboardEvent 객체의
isComposing속성을 초기화합니다. 이 속성은 생성되는 이벤트가 composition 시퀀스의 일부로 발생하는 경우true로, 그렇지 않으면false로 설정되어야 합니다.
keyCode, charCode, 및 which가 포함됩니다.
keyCode 속성은 컴퓨터 키보드의 특정 키와 연관된 숫자 값을 나타내고, charCode 속성은 해당 키와 연관된 문자(해당 키가 문자
값을 생성하는 경우)의 ASCII 값을 나타냅니다(이는 keyCode 값과 동일할 수 있음).
실제로 keyCode와 charCode는 플랫폼 간에, 심지어 동일한 구현이라도 운영 체제나 로컬라이제이션에 따라 일관되지 않습니다.
이 명세는 keyCode 또는 charCode의 값을 정의하지 않으며, charCode의 동작을 정의하지
않습니다. 준수하는 UI Events 구현에서는 콘텐츠 작성자가 대신 key
및 code를
사용할 수 있습니다.
자세한 정보는 레거시 키 속성에 관한 정보성 부록을 참조하세요.
기존 콘텐츠와의 호환성을 위해, 화면 기반 입력 장치의 소프트웨어 키보드와 같은 가상 키보드는 물리적 키가 없더라도 일반적인 범위의 키보드 이벤트를 생성할 것으로 기대됩니다.
일부 구현이나 시스템 구성에서는 사용 중인 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, 형식은 boolean, 기본값은false-
ctrlKey는MouseEvent또는KeyboardEvent객체의ctrlKey속성을 Control 키 수정자가 활성으로 간주되어야 할 경우true로, 그렇지 않으면false로 초기화합니다.값이
true일 때, 구현은 이벤트 객체의 키 수정자 상태도 초기화해야 하며,getModifierState()또는getModifierState()에서 매개변수로Control를 제공했을 때true를 반환하도록 해야 합니다. shiftKey, 형식은 boolean, 기본값은false-
shiftKey는MouseEvent또는KeyboardEvent객체의shiftKey속성을 Shift 키 수정자가 활성으로 간주되어야 할 경우true로, 그렇지 않으면false로 초기화합니다.값이
true일 때, 구현은 이벤트 객체의 키 수정자 상태도 초기화해야 하며,getModifierState()또는getModifierState()에서 매개변수로Shift를 제공했을 때true를 반환하도록 해야 합니다. altKey, 형식은 boolean, 기본값은false-
altKey는MouseEvent또는KeyboardEvent객체의altKey속성을 Alt(또는Option) 키 수정자가 활성으로 간주되어야 할 경우true로, 그렇지 않으면false로 초기화합니다.값이
true일 때, 구현은 이벤트 객체의 키 수정자 상태도 초기화해야 하며,getModifierState()또는getModifierState()에서 매개변수로Alt를 제공했을 때true를 반환하도록 해야 합니다. metaKey, 형식은 boolean, 기본값은false-
metaKey는MouseEvent또는KeyboardEvent객체의metaKey속성을 Meta 키 수정자가 활성으로 간주되어야 할 경우true로, 그렇지 않으면false로 초기화합니다.값이
true일 때, 구현은 이벤트 객체의 키 수정자 상태도 초기화해야 하며,getModifierState()또는getModifierState()에서 매개변수로Meta를 제공했을 때true를 반환하도록 해야 합니다. modifierAltGraph, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로AltGraph를 제공했을 때true를 반환하도록 합니다. modifierCapsLock, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로CapsLock를 제공했을 때true를 반환하도록 합니다. modifierFn, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로Fn를 제공했을 때true를 반환하도록 합니다. modifierFnLock, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로FnLock를 제공했을 때true를 반환하도록 합니다. modifierHyper, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로Hyper를 제공했을 때true를 반환하도록 합니다. modifierNumLock, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로NumLock를 제공했을 때true를 반환하도록 합니다. modifierScrollLock, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로ScrollLock를 제공했을 때true를 반환하도록 합니다. modifierSuper, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로Super를 제공했을 때true를 반환하도록 합니다. modifierSymbol, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로Symbol를 제공했을 때true를 반환하도록 합니다. modifierSymbolLock, 형식은 boolean, 기본값은false-
이벤트 객체의 키 수정자 상태를 초기화하여,
getModifierState()또는getModifierState()에서 매개변수로SymbolLock를 제공했을 때true를 반환하도록 합니다.
3.5.4. KeyboardEvent 알고리즘
3.5.4.1. KeyboardEvent를 위한 전역 상태
3.5.4.1.1. 사용자 에이전트 수준 상태
UA는 전체 사용자 에이전트에서 공유되는 다음 값들을 유지해야 합니다.
시스템에서 사용 가능한 각 수정자 키 의 현재 상태를 추적하는 키 수정자 상태(초기에는 비어 있음).
3.5.5. 키보드 이벤트 순서
이 명세에서 정의된 키보드 이벤트들은 특정 키에 대해 서로에 대해 정해진 순서로 발생합니다:
| 이벤트 유형 | 비고 | |
|---|---|---|
| 1 | keydown
| |
| 2 | beforeinput
| (문자 값을 생성하는 키에만 해당) |
| 이 키와 관련된 모든 기본 동작, 예: DOM에 문자 삽입. | ||
| 3 | input
| (DOM을 업데이트한 키에만 해당) |
| 키가 일정 기간 눌려 있는 결과로 발생하는 모든 이벤트(아래 참조). | ||
| 4 | keyup
|
키를 일정 시간 동안 누르고 있으면, 다음 이벤트들이 환경에 따라 반복될 수 있습니다:
| 이벤트 유형 | 비고 | |
|---|---|---|
| 1 | keydown
| (repeat
속성이 true로 설정된 경우)
|
| 2 | beforeinput
| (문자 값을 생성하는 키에만 해당) |
| 이 키와 관련된 모든 기본 동작, 예: DOM에 문자 삽입. | ||
| 3 | input
| (DOM을 업데이트한 키에만 해당) |
일반적으로 특정 키와 연관된 모든 기본
동작은 keyup 이벤트가 디스패치되기
전에 완료됩니다. 이로 인해 keyup 이벤트가 약간
지연될 수 있습니다(그러나 이는 인지 가능한 지연일 가능성은 낮습니다).
The 이벤트 대상은 키보드 동작을 처리하는 현재
포커스된 요소입니다. 이는 종종 HTML input 요소나 편집 가능한 텍스트 요소이지만,
호스트 언어에 의해 가속기 키 활성화나 기타 동작 트리거와 같은 비텍스트 목적의 키보드 입력을 받도록 정의된 요소일 수도 있습니다. 적절한 요소가 포커스되어 있지 않으면, 이벤트 대상은
사용 가능하면 HTML body 요소가 되며, 그렇지
않으면 루트 요소가 됩니다.
이벤트 대상은 서로 다른 키 이벤트들 사이에서
변경될 수 있습니다. 예를 들어, keydown 이벤트는 동일한 키스트로크에 대한 keyup 이벤트와 다른 이벤트 대상을 가질 가능성이 높습니다.
3.5.6. 키보드 이벤트 유형
3.5.6.1. keydown
| 형식 | keydown
|
|---|---|
| 인터페이스 | KeyboardEvent
|
| 동기 / 비동기 | 동기 |
| 버블링 | 예 |
| 신뢰된 대상 | Element
|
| 취소 가능 | 예 |
| 합성됨 | 예 |
| 기본 동작 | 다름: beforeinput 및 input 이벤트; 텍스트 합성 시스템 실행;
blur 및 focus 이벤트; keypress
이벤트(지원되는 경우); 활성화 동작; 기타 이벤트
|
| 컨텍스트 (신뢰된 이벤트) |
|
사용자 에이전트(user
agent)는 키가 눌릴 때 이 이벤트를 반드시 디스패치해야 합니다. keydown 이벤트 유형은 장치에 따라 다르며 입력 장치의 기능과 운영 체제에서의 매핑 방식에 의존합니다.
이 이벤트 유형은 키 매핑 이후에 생성되어야 합니다. 이
이벤트 유형은 동일한 키와 관련된 beforeinput, input, 및 keyup 이벤트보다 먼저 디스패치되어야 합니다.
keydown 이벤트의 기본 동작은 키에 따라
다릅니다:
-
키가 문자와 연관된 경우, 기본 동작은
beforeinput이벤트를 디스패치한 다음input이벤트를 디스패치해야 합니다. 매크로나 특정 연속된 데드 키와 같이 하나의 키가 여러 문자를 생성하는 경우에는, 각 문자에 대해 하나의beforeinput/input이벤트 세트를 디스패치해야 합니다. -
키가 텍스트 합성 시스템과 연관된 경우, 기본 동작은 해당 시스템을 실행하는 것입니다
-
키가
Tab키인 경우, 기본 동작은 문서의 포커스를 현재 포커스된 요소(있는 경우)에서 새 포커스된 요소로 이동시키는 것으로, 이는 포커스 이벤트 유형에 설명된 바와 같습니다. -
키가
Enter또는(Space) 키이고 현재 포커스가 상태 변경 요소에 있으면, 기본 동작은click이벤트를 디스패치하는 것이며, 해당 이벤트 유형이 사용자 에이전트에서 지원되는 경우DOMActivate이벤트도 디스패치해야 합니다.
이 이벤트가 취소된 경우, 관련된 이벤트 유형들은 디스패치되어서는 안 되며 관련 동작들도 수행되어서는 안 됩니다.
참고:
keydown 및 keyup 이벤트는 전통적으로 문자 값을 생성하는
키뿐만 아니라 어떤 키든지 감지하는 것과 관련이 있습니다.
3.5.6.2. keyup
| 형식 | keyup
|
|---|---|
| 인터페이스 | KeyboardEvent
|
| 동기 / 비동기 | 동기 |
| 버블링 | 예 |
| 신뢰된 대상 | Element
|
| 취소 가능 | 예 |
| 합성됨 | 예 |
| 기본 동작 | 없음 |
| 컨텍스트 (신뢰된 이벤트) |
|
사용자 에이전트(user
agent)는 키가 릴리스될 때 이 이벤트를 반드시 디스패치해야 합니다.
keyup 이벤트 유형은 장치에 따라 다르며 입력
장치의 기능과 운영 체제에서의 매핑 방식에 의존합니다. 이 이벤트 유형은 키 매핑 이후에 생성되어야 합니다. 이 이벤트 유형은 동일한 키와 관련된 keydown, beforeinput,
및 input 이벤트들 이후에 디스패치되어야
합니다.
keydown 및 keyup 이벤트는 전통적으로 문자 값을 생성하는
키뿐만 아니라 어떤 키든지 감지하는 것과 관련이 있습니다.
3.6. Composition Events
Composition Events는 키보드 이벤트와는 보조적이거나 대체적인 방식으로 텍스트를 입력할 수 있는 수단을 제공하여, 키보드에 흔히 존재하지 않을 수 있는 문자를 사용할 수 있게 합니다. 예를 들어, Composition Events는 표준 미국 키보드에 없는 문자에 악센트를 추가하거나, 여러 아시아 언어의 표의문자를 기본 구성 요소 또는 범주로부터 구성하거나, 모바일 장치 키보드에서 복수의 키 입력 조합으로 단어 선택을 하거나, 음성 인식 프로세서를 사용해 음성 명령을 텍스트로 변환하는 데 사용될 수 있습니다. Composition Events가 키보드 이벤트와 어떻게 결합되어 사용되는지에 대한 예는 § 4 Keyboard events and key values를 참조하세요.
개념적으로, 하나의 composition 세션은 하나의 compositionstart 이벤트, 하나 이상의 compositionupdate 이벤트들,
그리고 하나의
compositionend 이벤트로 구성되며, data
속성의 값은 세션 동안 이 이벤트 체인의 각 단계(stage) 사이에 지속됩니다.
참고:
composition 세션이 활성화되어 있는 동안, 키보드가 그 세션에 사용되는 입력 장치인 경우 키보드 이벤트들이 DOM으로 디스패치될 수 있습니다. 관련 이벤트 순서는 compositionstart 이벤트 세부사항과 IME
섹션을 참조하세요.
모든 IME 시스템이나 장치가 필요한 데이터를 DOM에 노출하는 것은 아니므로, 활성 합성 문자열(즉 "읽기 창" 또는 "후보 선택 메뉴 옵션")이 이 인터페이스를 통해 제공되지 않을 수 있으며, 그 경우 선택은 빈 문자열로 표시될 수 있습니다.
3.6.1. CompositionEvent 인터페이스
이 명세에서 도입됨
The CompositionEvent
인터페이스는 Composition Events와 관련된 특정 문맥 정보를 제공합니다.
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]. 문자들은 [UAX15]에 정의된 유니코드 정규화 형태인 NFC에 따라 정규화하는 것이 권장됩니다. 이 속성은 빈 문자열일 수도 있습니다.이 속성의 초기화되지 않은 값은 반드시
""(빈 문자열)이어야 합니다.
3.6.1.2. CompositionEventInit
dictionary :CompositionEventInit UIEventInit {DOMString data = ""; };
data, 타입은 DOMString, 기본값은""-
CompositionEvent 객체의
data속성을 IME 합성으로 생성된 문자들로 초기화합니다.
3.6.2. Composition Event Order
이 명세에서 정의된 Composition 이벤트들은 상호 간에 다음과 같은 순서로 발생해야 합니다:
| Event Type | Notes | |
|---|---|---|
| 1 | compositionstart
| |
| 2 | compositionupdate
| 여러 번 발생할 수 있음 |
| 3 | compositionend
|
3.6.3. Handwriting Recognition Systems
다음 예시는 펜 태블릿과 같은 필기 인식 시스템에서 텍스트 구절 text
를 합성할 때 발생할 수 있는
이벤트 순서를 Composition Events를 사용하여 설명합니다.
| Event Type | CompositionEventdata
| Notes | |
|---|---|---|---|
| 1 | compositionstart
| ""
| |
| 사용자가 태블릿 표면에 단어를 씀 | |||
| 2 | compositionupdate
| "test"
| |
| 사용자가 첫 번째 단어 일치 제안을 거부하고 다른 일치를 선택함 | |||
| 3 | compositionupdate
| "text"
| |
| 4 | compositionend
| "text"
|
3.6.4. Canceling Composition Events
만약 keydown 이벤트가 취소되면,
그 keydown로 인해 발생했어야 할 모든
Composition 이벤트들은
디스패치되어서는 안 됩니다:
| Event Type | Notes | |
|---|---|---|
| 1 | keydown
| 기본 동작이 방지됨, 예: preventDefault()
호출
|
| 어떤 Composition 이벤트도 디스패치되지 않음 | ||
| 2 | keyup
|
만약 초기의 compositionstart 이벤트가 취소되면 텍스트 합성 세션은
종료되어야 합니다. 합성 세션이 종료되었는지 여부와 상관없이, compositionend 이벤트는 반드시 전송되어야 합니다.
| Event Type | Notes | |
|---|---|---|
| 1 | keydown
| |
| 2 | compositionstart
| 기본 동작이 방지됨, 예: preventDefault()
호출
|
| 어떤 Composition 이벤트도 디스패치되지 않음 | ||
| 3 | compositionend
| |
| 4 | keyup
|
3.6.5. Key Events During Composition
합성 세션 동안에는 keydown 및 keyup 이벤트가 여전히 전송되어야 하며, 이
이벤트들은
isComposing
속성이 true로 설정되어 있어야 합니다.
| Event Type | KeyboardEventisComposing
| Notes | |
|---|---|---|---|
| 1 | keydown
| false | 이것이 합성을 시작시키는 키 이벤트입니다. |
| 2 | compositionstart
| ||
| 3 | compositionupdate
| ||
| 4 | keyup
| true | |
| ... | 합성 세션 동안 전송되는 모든 키 이벤트는 isComposing가
true로 설정되어야 합니다.
| ||
| 5 | keydown
| true | 이것이 합성에서 빠져나오는 키 이벤트입니다. |
| 6 | compositionend
| ||
| 7 | keyup
| false |
3.6.6. Input Events During Composition
합성 세션 동안에는 compositionupdate는 beforeinput가 전송된 후, 그러나
input 이벤트가 전송되기 전에
디스패치되어야 합니다.
| Event Type | Notes | |
|---|---|---|
| 1 | beforeinput
| |
| 2 | compositionupdate
| |
| 이 시점에서 DOM 업데이트가 발생합니다. | ||
| 3 | input
|
대부분의 IME는 합성 세션 동안 업데이트 취소를 지원하지 않습니다.
The beforeinput
and input events are sent
along with the
compositionupdate event whenever the DOM is updated
as part of
the composition. Since there are no DOM updates associated with the
compositionend event, beforeinput and input events
should not be sent at that time.
| Event Type | Notes | |
|---|---|---|
| 1 | beforeinput
| 이 이벤트를 취소하면 DOM 업데이트와 input 이벤트가 방지됩니다.
|
| 2 | compositionupdate
| |
| 이 시점에서 DOM 업데이트가 발생합니다. | ||
| 3 | input
| DOM이 업데이트된 경우에만 전송됩니다. |
| 4 | compositionend
|
3.6.7. Composition Event Types
3.6.7.1. compositionstart
| Type | compositionstart
|
|---|---|
| Interface | CompositionEvent
|
| Sync / Async | Sync |
| Bubbles | Yes |
| Trusted Targets | Element
|
| Cancelable | Yes |
| Composed | Yes |
| Default action | 텍스트 합성 시스템이 활성화될 때 새로운 합성 세션을 시작함 |
| Context (trusted events) |
사용자 에이전트는 텍스트 합성 시스템이 활성화되어 새 합성 세션이 시작되려 할 때(또는 시작되었을 때, 텍스트 합성 시스템에 따라)
반드시 이 이벤트를 디스패치해야 합니다. 이 이벤트 타입은 장치에 따라 다르며, 텍스트 변환 시스템의 기능과 운영체제로의 매핑 방식에
의존할 수 있습니다. 키보드가 입력 방법 편집기(IME)를 통해 사용될 때, 이 이벤트 타입은 keydown 이벤트 이후에 생성되지만, 음성 또는 필기 인식 시스템은 키보드 이벤트 없이 이 이벤트를 보낼
수도 있습니다.
일부 구현은 data
속성을 compositionstart 이벤트에 현재 문서에서 선택된 텍스트(편집 및 대체용)로 채울
수 있습니다.
그렇지 않으면, data
속성의 값은 반드시 빈 문자열이어야 합니다.
이 이벤트는 텍스트 합성 시스템이 새 합성 세션을 시작하기 직전에, 그리고 합성 과정으로 인해 DOM이 변경되기 전에 즉시 디스패치되어야 합니다. 이 이벤트의 기본 동작은 텍스트 합성 시스템이 새로운 합성 세션을 시작하는 것입니다. 이 이벤트가 취소되면, 텍스트 합성 시스템은 현재 합성 세션을 폐기해야 합니다.
compositionstart 이벤트 타입을 취소하는 것은 텍스트 합성 시스템 자체(예: 취소 버튼을 누르거나 IME 창을 닫음)를 취소하는 것과 구별됩니다.
일부 IME는 진행 중인 합성 세션을 취소하는 것을 지원하지 않습니다(예: 현재 그런 API가 없는 GTK). 이런 경우에는 preventDefault()
를 호출해도 이 이벤트의 기본 동작을 멈추지 못할 것입니다.
3.6.7.2. compositionupdate
| Type | compositionupdate
|
|---|---|
| Interface | CompositionEvent
|
| Sync / Async | Sync |
| Bubbles | Yes |
| Trusted Targets | Element
|
| Cancelable | No |
| Composed | Yes |
| Default action | 없음 |
| Context (trusted events) |
사용자 에이전트는 합성 세션 중 텍스트 합성 시스템이 활성 텍스트 구절을 새로운 문자로 업데이트할 때, 그 변경이
data에
반영되면
이 이벤트를 디스패치해야 합니다.
입력 제어와 합성 내용을 동기화하는 텍스트 합성 시스템에서는, compositionupdate 이벤트가 제어가 업데이트되기 전에
반드시 디스패치되어야 합니다.
합성 정보를 DOM에 노출하지 않는 일부 텍스트 합성 시스템의 경우, 이 이벤트는 합성 과정 중에 발생하지 않습니다.
만약 합성 세션이 취소되면, 이 이벤트는 compositionend 이벤트 바로 전에 발생하며,
data
속성은 빈 문자열로 설정됩니다.
3.6.7.3. compositionend
| Type | compositionend
|
|---|---|
| Interface | CompositionEvent
|
| Sync / Async | Sync |
| Bubbles | Yes |
| Trusted Targets | Element
|
| Cancelable | No |
| Composed | Yes |
| Default action | 없음 |
| Context (trusted events) |
사용자 에이전트는 텍스트 합성 시스템이 현재 합성 세션을 완료하거나 취소할 때 반드시 이 이벤트를 디스패치해야 하며,
compositionend 이벤트는 컨트롤이 업데이트된 이후에 디스패치되어야 합니다.
이 이벤트는 텍스트 합성 시스템이 합성 세션을 완료한 직후에 디스패치됩니다(예: IME가 닫히거나 최소화되거나 포커스에서 벗어나 해제되고, 포커스가 사용자 에이전트로 다시 전환되는 경우 등).
4. 키보드 이벤트와 키 값
이 절에는 키보드 이벤트에 관한 필수 정보가 포함되어 있습니다:
-
키보드 레이아웃, 매핑 및 키 값에 대한 설명
-
키 간의 관계(예: 죽은 키 또는 수정키)
-
키보드 이벤트와 그 기본 동작 간의 관계
-
key값 집합 및 이 집합 확장에 대한 가이드라인
이 절에서는 세르비아 문자와 한자를 사용하므로, PDF 버전이나 인쇄 버전에서는 잘못 표시되거나 표시되지 않을 수 있습니다.
4.1. 키보드 입력
이 절은 규범적이지 않습니다
각 키와 전체 키보드의 관계는 세 가지 측면이 있으며, 각각은 키보드의 모델과 구성, 특히 로케일(국가/언어)별로 다릅니다:
-
기계적 레이아웃: 키보드의 물리적 키의 크기, 배치, 위치
-
시각적 표시: 각 키에 새겨진 라벨(혹은 레전드)
-
기능적 매핑: 각 키의 추상적 키-값 연결
현행 표준에서는 key 값 및 code 값과 관련된 기능적 매핑만 정의하며,
키 레전드에 대해서는 간략히 설명합니다.
4.1.1. 키 레전드
이 절은 참고용입니다
키 레전드는 키캡(물리적 키의 사각형 뚜껑)에 인쇄되거나 각인된 시각적 표시입니다. 이 표시는 보통 해당 키를 누르면 생성될 하나 이상의 문자(예: "G", "8", "ш") 또는 해당 키의
기능을 나타내는 이름이나 기호(예: 위쪽 화살표 "⇧"는 Shift를 의미하거나,
"Enter" 문자열)로 구성됩니다. 키는 종종 이 표시로 불립니다(예:
). 하지만 키의 시각적 모습은 디지털 표현에 아무런 영향을 주지 않으며, 실제로는 완전히 부정확할 수도 있습니다. "Shift"와 "G" 키를
누르세요.Enter와 같은 컨트롤/기능키도 다른 기능이나 문자키로 매핑될 수 있습니다.
많은 키보드에는 일반적으로 문자를 생성하지 않는 키가 포함되어 있습니다. 심볼에 유니코드가 있을 수 있지만, 예를 들어 Shift 키에는 "⇧"라는 기호가 있지만 유니코드 코드포인트 U+21E7가 존재해도 실제 Shift 키를 누르면 이 문자가 생성되지 않으며,
Shift 자체에 대한 유니코드 코드포인트도 없습니다.
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 키가
왼쪽과 오른쪽 위치를 유지한다는 점에 유의하십시오.
| 키보드 레이아웃 | KeyboardEventkey
| KeyboardEventcode
| 메모 |
|---|---|---|---|
| US | "'"
| "Quote"
| |
| Japanese | ":"
| "Quote"
| |
| US Intl | "Dead"
| "Quote"
|
이 예제는 데드 키(dead key) 값들이 속성에 어떻게 인코딩되는지를 보여줍니다. key
값은 현재 로케일에 따라 달라지는 반면, code
속성은 일관된 값을 반환합니다.
"2" 키 처리.
| 키보드 레이아웃 | 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
다음 두 키 이벤트 시퀀스에서 속성 값을 비교해 보십시오. 둘 다 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
|
두 번째 시퀀스에서는 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 값 목록은 [UIEvents-Key]에서 정의합니다.
키 값은 key
속성을 통해 눌린 키의 값을 감지하는 데 사용할 수 있습니다. 콘텐츠 작성자는 대소문자, 숫자, 기호, 기타 문자 생성 키의 문자 값뿐만 아니라, 제어 키, 수정키, 기능 키, 문자를 생성하지 않는
기타 키의 키 값도 감지할 수 있습니다. 이러한 값은 특정 입력
문자열 감지, 마우스 등과 조합된 수정키 입력 처리, 가상 키보드 생성 등 다양한 용도로 사용할 수 있습니다.
키 값은 콘텐츠 작성자가 문자열 비교를 하거나, 규범적 호스트 언어에서 HTML accesskey와 같은 마크업 속성의 값으로, 또는 관련 용도로도 사용할
수 있습니다. 규범적 호스트 언어는 키 값의 두
동등한 문자열 값(즉 문자 값 또는 키 값) 중 어느 것을 사용해도 허용해야 합니다.
구현체는 플랫폼이나 키보드 레이아웃 맵핑과 무관하게 가장 관련성 높은 값을 키에 대해 사용하지만, 콘텐츠 작성자는 모든 키보드 장치가 그 값을
생성할 수 있다고 가정해서는 안 됩니다. 단축키 조합에 키보드 이벤트와 키 값을 사용할 경우, 대부분의 키보드 레이아웃에서 해당 키가 존재하므로 숫자 및 기능키(
을 고려할 수 있습니다 ([DWW95]).
F4, F5 등)를 문자 대신 사용하는 것
키 값은 물리적 키 자체나 키에 인쇄된 문자와 직접적으로 일치하지 않습니다. 키 값은 모든 활성 키와 키 입력 모드(Shift 등)의 현재 상태, 그리고 운영체제의 키보드 매핑에 따라
이벤트의 현재 값을 나타냅니다. 즉, QWERTY 키보드에서 O 라벨이 붙은 키는 쉬프트가 안 눌린 상태에서는 "o", 쉬프트가 눌린 상태에서는 "O" 키 값을 가집니다. 사용자는 키보드를 임의로 커스텀 매핑할 수 있으므로, 콘텐츠 작성자는 키의 쉬프트/언쉬프트 상태와 문자의 대/소문자
사이의 관계를 가정하지 말고 key
속성의 값을 사용하는 것이 바람직합니다.
예를 들어 [UIEvents-Code]의 Standard "102" 키보드 레이아웃은 한 가지 키 매핑 사례를 보여줍니다. 표준 및 특이한 매핑은
매우 다양합니다.
죽은 키 지원을
단순화하기 위해, 운영체제가 죽은 키 상태를 처리할 때, 죽은 키
시퀀스의 현재 상태는 key
속성으로 보고되지 않습니다.
대신 "Dead" 키 값이
보고됩니다.
구현체는 조합 이벤트를 생성하여, 죽은 키 시퀀스의 중간 상태를 data
속성으로 보고합니다. 앞의 예시와 같이, QWERTY 키보드에서
O 키에 대해 죽은 키 조작으로 움라우트(¨)를 추가할 때 언쉬프트 상태에서는 "ö",
쉬프트 상태에서는 "Ö"가 data
값이 됩니다.
또한, 키 이벤트 상태와 키 값은 일대일 관계가 아니라는 점도 중요합니다. 특정 키 값은 여러 키와 연관될 수 있습니다. 예를 들어, 대부분의 표준 키보드에는 Shift 키 값이 두 개 이상 있으며(보통 location
값 DOM_KEY_LOCATION_LEFT
및 DOM_KEY_LOCATION_RIGHT로
구분), 8 키 값도 두 개 이상이며(보통 location
값 DOM_KEY_LOCATION_STANDARD
및 DOM_KEY_LOCATION_NUMPAD로
구분), 사용자가 커스텀 키보드 레이아웃을 구성할 경우 여러 키 상태에 동일한 키 값이 중복될 수 있습니다(location
은 표준 키보드 레이아웃을 위한 것이며, 항상 의미 있는 구분이 가능한 것은 아님).
마지막으로, 문자 표현의 의미는 맥락에 따라 복잡합니다. 예를 들어 별표("*") 기호는 일부 맥락에서는 각주나 강조(텍스트를 괄호로 감쌀
때 등)를 나타내지만, 문서나 프로그램에 따라서는 곱셈 연산을 의미할 수도 있습니다. 또 다른 문서/프로그램에서는 곱셈 기호("×",
유니코드 U+00D7)나 라틴 소문자 "x"가 사용되기도 합니다(많은 키보드에 곱셈 키가 없고, "×"와 "x"가 시각적으로 비슷하기 때문). 문자 표현의 의미/기능은 이 명세서의 범위를
벗어납니다.
4.3.1. 수정키
키보드 입력은 키의 일반 동작을 변경하기 위해 수정 키(modifier keys)를 사용합니다. 다른 키와 마찬가지로, 수정 키는 아래 예제에 표시된 것처럼 keydown 및
keyup 이벤트를 생성합니다. 일부 수정자는
키가 눌려 있거나 계속 눌린 상태인 동안 활성화되며, 예로는 Alt, Control,
Shift, AltGraph, 또는
Meta가 있습니다. 다른 수정자는 CapsLock, NumLock, 또는 ScrollLock처럼 상태에 따라 활성화됩니다. 상태의 변경은 수정
키가 눌릴 때 발생합니다.
KeyboardEvent
인터페이스는 일부 일반 수정 키에 대해 편리한 속성을 제공합니다: ctrlKey,
shiftKey,
altKey,
metaKey.
일부 운영 체제는 AltGraph 수정 키를 Alt와
Control 수정 키의 조합으로 시뮬레이트합니다. 구현체는 AltGraph 수정 키를
사용하는 것이 권장됩니다.
U+0051)를 생성할 때 발생할 수 있는 이벤트의 가능한 시퀀스를 설명합니다:
| 이벤트 타입 | KeyboardEventkey
| 수정키 | 메모 | |
|---|---|---|---|---|
| 1 | keydown
| "Shift"
| shiftKey
| |
| 2 | keydown
| "Q"
| shiftKey
| Latin Capital Letter Q |
| 3 | beforeinput
| |||
| 4 | input
| |||
| 5 | keyup
| "Q"
| shiftKey
| |
| 6 | keyup
| "Shift"
|
Shift 키가 Q
키보다 먼저 해제됩니다. Q 키의 키 값은 keyup 이벤트에서 비시프트(unsifted) 값으로 되돌아갑니다:
| 이벤트 타입 | KeyboardEventkey
| 수정키 | 메모 | |
|---|---|---|---|---|
| 1 | keydown
| "Shift"
| shiftKey
| |
| 2 | keydown
| "Q"
| shiftKey
| Latin Capital Letter Q |
| 3 | beforeinput
| |||
| 4 | input
| |||
| 5 | keyup
| "Shift"
| ||
| 6 | keyup
| "q"
| Latin Small Letter Q |
| 이벤트 타입 | KeyboardEventkey
| 수정키 | 메모 | |
|---|---|---|---|---|
| 1 | keydown
| "Control"
| ctrlKey
| |
| 2 | keydown
| "v"
| ctrlKey
| Latin Small Letter V |
어떠한 beforeinput 또는 input
이벤트도 생성되지 않습니다.
| ||||
| 3 | keyup
| "v"
| ctrlKey
| Latin Small Letter V |
| 4 | keyup
| "Control"
|
Shift와
Control가 모두 눌렸을 때의 이벤트 시퀀스를 보여줍니다:
| 이벤트 타입 | KeyboardEventkey
| 수정키 | 메모 | |
|---|---|---|---|---|
| 1 | keydown
| "Control"
| ctrlKey
| |
| 2 | keydown
| "Shift"
| ctrlKey,
shiftKey
| |
| 3 | keydown
| "V"
| ctrlKey,
shiftKey
| Latin Capital Letter V |
어떠한 beforeinput 또는 input
이벤트도 생성되지 않습니다.
| ||||
| 4 | keyup
| "V"
| ctrlKey,
shiftKey
| Latin Capital Letter V |
| 5 | keyup
| "Shift"
| ctrlKey
| |
| 6 | keyup
| "Control"
|
| 이벤트 타입 | KeyboardEventkey
| 수정키 | 메모 | |
|---|---|---|---|---|
| 1 | keydown
| "Control"
| ctrlKey
| |
| 2 | keydown
| "ر"
| ctrlKey
| Arabic Letter Reh |
어떠한 beforeinput 또는 input
이벤트도 생성되지 않습니다.
| ||||
| 3 | keyup
| "ر"
| ctrlKey
| Arabic Letter Reh |
| 4 | keyup
| "Control"
|
keydown 및 keyup 이벤트의 값은 키를 눌렀을 때의 현재 키보드 레이아웃에 따라 달라집니다. 즉, US 레이아웃의
v 키와 아랍어 레이아웃의 ر 키는 동일한 물리적 키여도 서로 다른 이벤트가
발생합니다. 동일 물리적 키에서 발생한 이벤트인지 식별하려면 code
속성을 사용해야 합니다.
일부 경우에는 수정키가 키 이벤트의 key
값을 변경합니다. 예를 들어, 일부 MacOS 키보드에서는 "delete" 라벨이 붙은 키가 수정되지 않은 상태에서는 Windows OS의 Backspace 키처럼 동작하지만, Fn 키로 수정하면 Delete 키처럼 동작하며, key
값은 현재 수정 상태에서 해당 키의 가장 적합한 기능과 일치합니다.
4.3.2. 죽은 키
일부 키보드 입력은 죽은 키를 사용하여 조합 문자 시퀀스를
입력합니다. 필기 입력과 달리(사용자가 먼저 기본 문자를 입력), 키보드 입력에서는 죽은 키를 누르면 특수 상태에 진입하고, 제한된 수의 합법적인
기본 문자를 입력할 때만 문자가 출력됩니다.
MacOS와 Linux 운영체제는 죽은 키 처리를 위해 입력 방법을 사용합니다.
모든 키보드 레이아웃과 맵핑에서 죽은 키는 키 값 Dead로 표시됩니다. 죽은 키가 눌릴 때마다 사용자 에이전트는 반드시 조합
이벤트를 디스패치해야 하며, compositionupdate 이벤트의 data
값에는 현재 죽은 키 조합 시퀀스의 문자 값이 들어가야 합니다.
유니코드 결합 문자는 항상 필기 입력 시퀀스(문자 뒤에 결합 문자)로 처리되지만, 일반적인 죽은 키 입력은 결합 문자가 대응 문자보다 먼저 올 수도 있습니다. 예를 들어
naïve라는 단어에서 ¨ 결합 부호를 사용할 때, 유니코드 순서는 nai¨ve가 되지만, 입력 시에는 na¨ive로
입력할 수 있습니다. U+0302(Combining Circumflex Accent key)와 U+0065(라틴 소문자 E 키)를 연속 입력하면(프랑스 키보드, 프랑스 맵핑, 수정키 미사용) 유니코드 문자 "ê"(라틴 소문자 E에 곡절 부호)를 생성하며, 이는 유니코드 정규화 형식 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 |
두 번째 keydown
이벤트(단계 5)에서, 키 값(이벤트가 억제되지 않았다고 가정하면)은 일반적인 상황에서는 일반적으로 "e" (라틴 소문자
e)가 되지 않습니다. 그 이유는 사용자 에이전트에 전달되는 값이 이미 데드 키 동작에 의해 변경되었기 때문입니다.
사용자가 데드 키를 누른 후, 지원되지 않는 기본 문자를 입력하는 경우(즉, 활성 발음 구별 부호가 해당 기본 문자에 사용될 수 없는 경우), 이 과정이 중단될 수 있습니다:
| Event Type | KeyboardEventkey
| KeyboardEventisComposing
| CompositionEventdata
| Notes | |
|---|---|---|---|---|---|
| 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
인터페이스와 이벤트를 통해 입력기(IME) 모델을 포함합니다.
단, 조합 이벤트와 키보드 이벤트는 반드시 일대일로 매핑되는 것은 아닙니다. 예를 들어, Accept 키 값에 대한 keydown을 받더라도,
IME에서 현재 선택된 텍스트가 실제로 확정된다는 의미가 아니라
단순히 키 입력이 발생했다는 뜻일 뿐이며, 이는 IME의 Accept 기능과는
분리되어 있습니다(대부분의 IME 시스템에서는 compositionend 이벤트가 발생함). 키보드 이벤트로는 입력기의 현재 상태를 알 수
없으며, 이는 CompositionEvent
인터페이스의 data
속성으로 확인할 수 있습니다. 또한 IME 시스템과 장치마다 기능과 해당 기능을
활성화하는 키가 다르므로, Convert 및 Accept 키가 다른 키로 대체될 수
있습니다. 키보드 이벤트는 키보드 레이아웃 매핑 이후 입력장치에서 발생하는 이벤트와 대응합니다.
일부 구현이나 시스템 설정에서는 사용 중인 IME에 의해 일부 키 이벤트나 값이 억제될 수 있습니다.
다음 예시는 일본어 입력기를 사용하여 유니코드 문자 "市"(한자, CJK 통합 한자)를 생성하는 키 시퀀스를 설명합니다. 이 예시는 입력기가
활성화되어 일본어 로마자 입력 모드임을 가정합니다. Convert와 Accept 키는
입력장치와 IME 설정에 따라 각각 U+0020(스페이스 키), Enter로 대체될
수 있습니다.
"詩"(시
)와 "市"(도시
)는 모두 발음이 し(shi
/si
)로 동일한 동음이의어이므로, 사용자가 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
| 변환(Convert) | |
| 13 | beforeinput
| ||||
| 14 | compositionupdate
| "詩"
| "시(poem)" | ||
| DOM이 업데이트됨 | |||||
| 15 | input
| ||||
| 16 | keyup
| "Convert"
| true
| ||
| 17 | keydown
| "Convert"
| true
| 변환(Convert) | |
| 18 | beforeinput
| ||||
| 19 | compositionupdate
| "市"
| "도시(city)" | ||
| DOM이 업데이트됨 | |||||
| 20 | input
| ||||
| 21 | keyup
| "Convert"
| true
| ||
| 22 | keydown
| "Accept"
| true
| 확정(Accept) | |
| 23 | compositionend
| "市"
| |||
| 24 | keyup
| "Accept"
| false
|
IME 조합 입력은 아래 예시처럼 취소될 수도 있으며, 조건은 이전 예시와 동일합니다. Cancel 키도 입력장치와 IME 설정에 따라
U+001B(Escape 키) 등으로 대체될 수 있습니다.
| 이벤트 유형 | 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
| 변환(Convert) | |
| 9 | compositionupdate
| "詩"
| "시(poem)" | ||
| 10 | keyup
| "Convert"
| true
| ||
| 11 | keydown
| "Convert"
| true
| 변환(Convert) | |
| 12 | compositionupdate
| "市"
| "도시(city)" | ||
| 13 | keyup
| "Convert"
| true
| ||
| 14 | keydown
| "Cancel"
| true
| 취소(Cancel) | |
| 15 | compositionupdate
| ""
| |||
| 16 | compositionend
| ""
| |||
| 17 | keyup
| "Cancel"
| false
|
일부 IME(예: MacOS 운영체제)는 조합을 취소하기 전에 조합 데이터 속성을 빈 문자열로 설정할 수 있습니다.
4.3.3.1. 입력기(IME) 모드 키
일부 장치의 특정 키는 입력기(IME) 기능을 활성화하거나, 활성화된 입력기(IME)의 모드를 변경하는 용도로 설계되어 있습니다.
이러한 목적을 위한 커스텀 키는 장치나 언어 모드별로 정의할 수 있습니다. 현행 표준에서 정의된 이러한 키는 다음과 같습니다: "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. 기본 동작 및 취소 가능한 키보드 이벤트
키다운(default
action) 이벤트의 기본 동작을 취소하는 것은 해당 keydown 이벤트와 대응되는 keyup
이벤트에 영향을 주어서는 안 되지만, 해당 beforeinput 및 input (그리고 지원되는 경우 keypress) 이벤트의 생성은 반드시 막아야 합니다. 다음 예제는
US 키보드에서 US 매핑을 사용하여 유니코드 문자 Q (라틴 대문자 Q)를 생성하기 위한 가능한 키 시퀀스를 설명합니다:
| Event Type | KeyboardEventkey
| InputEventdata
| 수정키 | 메모 | |
|---|---|---|---|---|---|
| 1 | keydown
| "Shift"
| shiftKey
| ||
| 2 | keydown
| "Q"
| shiftKey
| 기본 동작(default
action)이 방지됩니다. 예: preventDefault()
호출.
| |
beforeinput 또는 input
(또는 지원되는 경우 keypress) 이벤트가 생성되지 않습니다
| |||||
| 3 | keyup
| "Q"
| shiftKey
| ||
| 4 | keyup
| "Shift"
|
키가 수정 키일 경우에도, 해당 키 입력은 수정키 상태에 반영되어야 합니다. 다음 예제는 US 키보드에서 US 매핑을 사용하여 유니코드 문자 Q (라틴 대문자 Q)를 생성하기 위한 가능한 키 시퀀스를 설명합니다:
| Event Type | KeyboardEventkey
| InputEventdata
| 수정키 | 메모 | |
|---|---|---|---|---|---|
| 1 | keydown
| "Shift"
| shiftKey
| 기본 동작(default
action)이 방지됩니다. 예: preventDefault()
호출.
| |
| 2 | keydown
| "Q"
| shiftKey
| ||
| 3 | beforeinput
| "Q"
| |||
| 4 | input
| ||||
| 5 | keyup
| "Q"
| shiftKey
| ||
| 6 | keyup
| "Shift"
|
키가 여러 키 입력의 연속의 일부인 경우, 그것이 dead
key이거나 입력 방법 편집기(Input Method Editor) 시퀀스에
기여하는 경우에는, 오직 keydown
이벤트에서
default action이 취소된 경우에만
해당 키 입력을 무시해야 합니다(반영하지 않아야 합니다).
dead key를 keyup 이벤트에서 취소하는 것은
beforeinput 또는
input 이벤트에 아무런 영향을 미치지 않습니다.
다음 예제는
프랑스 키보드에서 프랑스 매핑을 사용하고 어떠한 수정키도 활성화되어 있지 않은 상태에서 데드 키 "Dead"
(U+0302 결합 캐럿 악센트 키)와 "e" (U+0065, 라틴 소문자 e 키)를 사용하는 경우입니다:
| Event Type | KeyboardEventkey
| InputEventdata
| 메모 | |
|---|---|---|---|---|
| 1 | keydown
| "Dead"
| 기본 동작(default
action)이 방지됩니다. 예: 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. 윈도우 수준 상태
사용자 에이전트(UA)는 창과 공유되는 다음 값을 유지해야 합니다.
A 마지막 마우스 이동 값(초기값은 정의되지 않음)은 마지막 mousemove 이벤트의 위치를 기록합니다.
5.2.2. MouseEvent에 대한 PointerLock 속성 초기화
- 입력
-
event, 하나의
MouseEvent - 출력
-
없음
5.2.3. mousemove에 대한 PointerLock 속성 설정
- 입력
-
event, 하나의
MouseEvent - 출력
-
없음
-
만약 event.
type이 "mousemove"가 아니면, 종료 -
만약 마지막 마우스 이동이 정의되어 있지 않다면, 다음을 실행
-
그렇지 않으면,
-
설정 event.
movementX= event.screenX- 마지막 마우스 이동의 x-좌표 -
설정 event.
movementY= event.screenX- 마지막 마우스 이동의 y-좌표
-
-
설정 마지막 마우스 이동 = ( event.
screenX, event.screenY)
6. 레거시 이벤트 초기자
이 섹션은 규범적입니다. 다음 기능들은 구식이며 레거시 소프트웨어와의 호환성이 필요한 사용자 에이전트에서만 구현되어야 합니다.
이 명세의 초기 버전들은 인터페이스에 초기화 메서드(예: initMouseEvent)를 포함하고 있었고,
이 메서드들은 대부분의 경우 이벤트 객체의 모든 속성을 완전히 초기화하지 못하는 긴 매개변수 목록을 필요로 했습니다. 이로 인해
기본 Event
인터페이스에서 파생된 이벤트 인터페이스들은 이벤트를 완전히 초기화하려면 파생된 각 인터페이스의 초기화자를
명시적으로 호출해야 했습니다.
이 표준의 개발에 긴 시간이 소요된 탓에 일부 구현체는 이러한(현재는 사용 중단된) 초기자 메서드들에 의존하게 되었을 수 있습니다. 완전성을 위해 이 부록에서는 이러한 레거시 이벤트 초기자들을 설명합니다.
6.1. 레거시 이벤트 초기자 인터페이스
이 섹션은 정보 제공용입니다
이 섹션은 이 명세의 이전 버전에 도입된 레거시 초기자 메서드들을 문서화합니다.
6.1.1. UIEvent 인터페이스용 초기자
partial interface UIEvent { // Deprecated in this specificationundefined initUIEvent (DOMString ,typeArg optional boolean =bubblesArg false ,optional boolean =cancelableArg false ,optional Window ?=viewArg null ,optional long = 0); };detailArg
initUIEvent(typeArg)-
UIEvent 객체의 속성을 초기화합니다.
이 메서드는
initEvent()와 동일한 동작을 합니다.initUIEvent메서드는 사용 중단(deprecated)되었지만, 널리 배포된 구현체들과의 하위 호환성을 위해 지원됩니다.- DOMString typeArg
-
이 매개변수에 대한 설명은
initEvent()메서드를 참조하십시오. - boolean bubblesArg
-
이 매개변수에 대한 설명은
initEvent()메서드를 참조하십시오. - boolean cancelableArg
-
이 매개변수에 대한 설명은
initEvent()메서드를 참조하십시오. - Window? viewArg
-
view를 지정합니다. 이 값은null일 수 있습니다. - long detailArg
-
detail를 지정합니다.
6.1.2. KeyboardEvent 인터페이스용 초기자
이 레거시 KeyboardEvent 초기자의 인수 목록에는 다른 초기자들에 있는 detailArg가 포함되어 있지 않고
대신 locale 인수를 추가합니다; 이는 기존 구현체와의 호환성을 위해 이 불일치를 유지할 필요가 있습니다.
partial interface KeyboardEvent { // Originally introduced (and deprecated) in this specificationundefined 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 객체의 속성을 초기화합니다. 이
메서드는
UIEvent.initUIEvent()와 동일한 동작을 합니다.detail값은 정의되지 않은 상태로 남습니다.initKeyboardEvent메서드는 사용 중단(deprecated)되었습니다.- DOMString typeArg
-
이 매개변수에 대한 설명은
initEvent()메서드를 참조하십시오. - boolean bubblesArg
-
이 매개변수에 대한 설명은
initEvent()메서드를 참조하십시오. - boolean cancelableArg
-
이 매개변수에 대한 설명은
initEvent()메서드를 참조하십시오. - Window? viewArg
-
view를 지정합니다. 이 값은null일 수 있습니다. - 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 { // Originally introduced (and deprecated) in this specificationundefined 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메서드는 사용 중단(deprecated)되었습니다.- DOMString typeArg
-
이 매개변수에 대한 설명은
initEvent()메서드를 참조하십시오. - boolean bubblesArg
-
이 매개변수에 대한 설명은
initEvent()메서드를 참조하십시오. - boolean cancelableArg
-
이 매개변수에 대한 설명은
initEvent()메서드를 참조하십시오. - Window? viewArg
-
view를 지정합니다. 이 값은null일 수 있습니다. - DOMString dataArg
-
data를 지정합니다.
7. 레거시 키 & 마우스 이벤트 속성
이 절은 비규범적입니다. 다음 속성들은 구식이며 이러한 키보드 이벤트들을 필요로 하는 레거시 소프트웨어와의 호환성이 필요한 user agents에서만 구현되어야 합니다.
이 기능들은 공식적으로 명세된 적이 없으며 현재 브라우저 구현은 중요한 면에서 다양합니다. 많은 양의 레거시 컨텐츠(스크립트 라이브러리 등을 포함)들이 user agent를 감지하고 그에 따라 동작하는 데 의존하고 있으므로, 이러한 레거시 속성 및 이벤트들을 정식화하려는 시도는 수정하거나 활성화할 수 있는 양만큼의 컨텐츠를 깨뜨릴 위험이 있습니다. 또한 이 속성들은 국제적 사용에 적합하지 않으며 접근성 문제를 해결하지도 않습니다.
따라서 이 명세는 키보드 입력을 처리하는 데 일반적으로 사용되는 이벤트 및 속성들을 규범적으로 정의하지 않지만, 이러한 속성과
이벤트들은 레거시 컨텐츠와의 호환성을 위해 user agents에 존재할 수 있습니다. 저자들은
key
속성을 charCode
및 keyCode
속성들 대신 사용해야 합니다.
그러나 이들 기능의 현재 상태와 규범적 이벤트 및 속성과의 관계를 문서화하기 위해, 이 절은 정보 제공용 설명을 제공합니다. 이 속성과 이벤트들을 지원하는 구현체의 경우, 이 절에 제공된 정의들을 사용하는 것이 권장됩니다.
7.1. 레거시 UIEvent
보조 인터페이스
이 절은 비규범적입니다
User
agents는 전통적으로 which
속성을 포함하여 KeyboardEvent와
MouseEvent가
보조 이벤트 정보를 기록할 수 있도록 해 왔습니다.
이 명세의 이전 버전들은 공유된 which
속성을 UIEvent에
정의하기보다는,
KeyboardEvent와
MouseEvent
에 각각 별도의 which
속성을 정의했습니다.
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 (보조)
which
를 UIEvent
에 대해 지원하는 브라우저는 다음 멤버들도 UIEventInit
딕셔너리에 추가해야 합니다.
부분적 UIEventInit
딕셔너리는 UIEventInit
딕셔너리의 정보 제공용 확장으로, 해당 UIEvent
속성을 초기화하기 위한 which
멤버를 추가합니다.
partial dictionary UIEventInit {unsigned long which = 0; };
which, 타입은 unsigned long, 기본값0-
which속성을UIEvent에 초기화합니다.
7.2. 레거시 KeyboardEvent
보조 인터페이스
이 절은 비규범적입니다
키보드에 대한 브라우저 지원은 전통적으로 세 가지 임시 속성, keyCode,
charCode,
및 UIEvent의
which에
의존해 왔습니다.
이 세 속성 모두 눌린 키의 특정 측면을 나타내는 숫자 코드를 반환합니다: keyCode
는 키 자체의 인덱스입니다. charCode
는 문자 키의 ASCII 값입니다.
which
는 사용할 수 있을 경우 문자 값을, 그렇지 않으면 키 인덱스를 반환합니다. 각 속성의 값과 속성 지원 여부는 플랫폼, 키보드 언어와 배열, 사용자 에이전트, 버전, 그리고 심지어
이벤트 유형에 따라 일관성이 없습니다.
7.2.1. 인터페이스 KeyboardEvent (보조)
부분적 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이벤트로부터 생성되는 문자 입력에 대한 문자 값을 보관합니다. 값은 그 문자의 유니코드 참조 번호(코드 포인트)입니다(예: 인쇄 가능한 문자에 대해event.charCode = event.key.charCodeAt(0)).keydown또는keyup이벤트의 경우,charCode값은0입니다. keyCode, 타입은 unsigned long, 읽기 전용-
keyCode는 누른 키와 연관된 수정되지 않은 식별자를 나타내는 시스템 및 구현체 종속의 숫자 코드를 보관합니다.key속성과 달리 가능한 값들의 집합이 이 명세에서 규범적으로 정의되어 있지 않습니다. 일반적으로 이keyCode값들은 ASCII의 십진수 코드포인트 [RFC20][US-ASCII] 또는 Windows 1252 [WIN1252]의 십진 코드포인트를 나타내는 것이 권장되지만, 적절한 다른 문자 집합에서 가져올 수도 있습니다. 키를 식별할 수 없는 구현체는 키 값으로0을 사용합니다.키에 대한 값을 결정하는 방법에 대한 자세한 내용은 § 7.3 Legacy key models를 참조하십시오.
7.2.2. 인터페이스 KeyboardEventInit (보조)
keyCode
및 charCode
를 KeyboardEvent
에 대해 지원하는 브라우저는 다음 멤버들도 KeyboardEventInit
딕셔너리에 추가해야 합니다.
부분적 KeyboardEventInit
딕셔너리는 KeyboardEventInit
딕셔너리의 정보 제공용 확장으로, 해당 KeyboardEvent
속성을 초기화하기 위한 charCode
및 keyCode
멤버를 추가합니다.
partial dictionary KeyboardEventInit { // The following support legacy user agentsunsigned long charCode = 0;unsigned long keyCode = 0; };
charCode, 타입은 unsigned long, 기본값0-
charCode속성을KeyboardEvent에 대해 이벤트의 문자에 대한 유니코드 코드 포인트로 초기화합니다. keyCode, 타입은 unsigned long, 기본값0-
keyCode속성을KeyboardEvent에 대해 누른 키와 연관된 수정되지 않은 식별자를 나타내는 시스템 및 구현체 종속의 숫자 코드로 초기화합니다.
7.3. 레거시 키 모델
이 절은 참고용입니다
구현체마다 이벤트 타입에 따라 이 속성에 어떤 값이 노출되는지 다릅니다. 구현체는 keyCode
속성에서 가상 키 코드와 문자 코드를 모두 노출하는(통합 모델), 또는 keyCode
와 charCode
속성을 분리해서 보고하는(분리 모델) 방식을 선택할 수 있습니다.
7.3.1. keyCode
값 결정 방법 (keydown, keyup 이벤트)
keydown 또는 keyup 이벤트의 keyCode
결정 방법:
-
운영체제 이벤트 정보에서 가상 키 코드를 읽어옵니다(가능한 경우).
-
입력기(IME)가 키 입력을 처리 중이고 이벤트가
keydown이면 229를 반환합니다. -
수정키 없이 누르면 숫자(0-9)가 입력되는 키라면, 해당 숫자의 ASCII 코드를 반환합니다.
-
수정키 없이 누르면 영문 소문자(a-z)가 입력되는 키라면, 그 대문자에 해당하는 ASCII 코드를 반환합니다.
-
운영체제/플랫폼용 키 코드 변환 테이블을 지원한다면, 테이블에서 값을 조회하여 대체 가상키 값을 지정하고 있으면 그 값을 반환합니다.
-
키의 기능이 구현체별 판단에 따라 § 7.3.3 고정 가상 키 코드 표의 키에 해당한다면, 표에 있는 값을 반환합니다.
-
운영체제에서 가상 키 코드를 반환합니다.
-
키 코드를 찾지 못하면 0을 반환합니다.
7.3.2.
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. 레거시 이벤트 유형
이 섹션은 규범적입니다. 다음 이벤트 유형들은 구식이며 레거시 소프트웨어와의 호환이 필요한 사용자 에이전트에 의해서만 구현되어야 합니다.
이 섹션의 목적은 이러한 기능들의 현재 상태와 규범적 이벤트와의 관계를 문서화하는 것입니다. 이 이벤트들을 지원하는 구현체의 경우, 본 섹션에서 제공되는 정의를 사용하는 것이 권장됩니다.
다음 표는 이 명세에서 더 이상 권장되지 않는 이벤트 유형들에 대한 설명용 요약을 제공합니다. 참고와 완전성을 위해 여기에 포함되어 있습니다.
| 이벤트 유형 | 동기 / 비동기 | 버블링 단계 | 신뢰할 수 있는 이벤트 대상 유형 | 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
|
| 취소 가능 | 예 |
| 구성됨 | 예 |
| 기본 동작 | 없음 |
| 컨텍스트 (신뢰된 이벤트) |
버튼, 링크 또는 기타 상태를 변경하는 요소가 활성화될 때, 사용자 에이전트는 이 이벤트를 반드시 디스패치해야 합니다.
DOMActivate
이벤트 유형은 참고와 완전성을 위해 이 명세에 정의되어
있지만, 이 명세는 관련된
이벤트 유형인 click을 대신 사용하도록 이 이벤트 유형의 사용을 더 이상 권장하지 않습니다. 다른 명세들은 하위
호환성을 위해 자체적인 DOMActivate 이벤트 유형을 정의하고 유지할 수 있습니다.
DOMActivate
및 click는 완전히 동일하지 않지만,
구현된 click 이벤트 동작은 DOMActivate 이벤트 유형이 설계된 중요한 접근성 측면을 포함하도록 발전했으며, 더 널리
구현되어 있습니다. 콘텐츠 작성자는 최대한의 접근성을 보장하기 위해 관련된 mousedown 또는 mouseup 이벤트 유형보다 click 이벤트 유형을 사용하는 것이 권장됩니다.
이벤트 유형 DOMActivate를 지원하는 구현체는 또한 관련된 click 이벤트의 기본 동작으로서 DOMActivate 이벤트를 디스패치해야 합니다. 그러나 이러한 구현체는 주어진 활성화 트리거 발생에 대해
관련된 활성화 동작을 한 번만 시작해야 합니다.
DOMActivate
이벤트 유형은 XForms [XFORMS11]에서 필수로 지원되어야
하며, 이는 호스트 언어 내에서의 구현을 대상으로 합니다. 플러그인 또는 스크립트 기반의 XForms 구현이 이 명세의 네이티브 구현에 설치되는 시나리오에서 해당 네이티브 구현이
DOMActivate
이벤트 유형을 지원하지 않는다면, XForms
사용자 에이전트는 적절한 활성화 트리거에 기반하여 자체적으로 DOMActivate 이벤트를 합성하고 디스패치해야
합니다.
따라서 UI Events에 부합하는 click 이벤트가 사용자 에이전트에 의해
디스패치되면,
XForms 사용자 에이전트는
해당 click 이벤트의 기본 동작과 동일한 관련 속성을 가진
DOMActivate
이벤트를 합성할지 여부를 결정해야 합니다.
적절한 단서는 click 이벤트의 isTrusted
여부
또는 해당 이벤트 대상에
DOMActivate
이벤트 리스너가 등록되어 있는지 여부 등이 될 수 있습니다.
많은 사용자 에이전트에서 DOMActivate의 상호운용 가능한 지원에 의존하지 마십시오. 대신 더 널리 구현되어 접근성
측면에서 더 나은 동작을 제공하는 click 이벤트 유형을 사용해야 합니다.
DOMActivate
이벤트 유형은 이 명세에서 사용
중단(Deprecated)되었습니다.
8.1.2. 활성화 이벤트 순서
만약 DOMActivate 이벤트가 사용자 에이전트에 의해 지원된다면, 관련 이벤트들은 서로에 대해 정해진 순서대로 반드시 디스패치되어야 합니다: (관련 이벤트만
나열됨):
| 이벤트 유형 | 참고 | |
|---|---|---|
| 1 | click
| |
| 2 | DOMActivate
| 기본 동작, 사용자
에이전트가 지원하는 경우; 합성됨; isTrusted="true"
|
| 3 | 모든 다른 기본 동작, 포함하여 활성화 동작 |
포커스된 요소가 키 이벤트로 활성화되는 경우, 다음은 일반적인 이벤트 순서입니다 (관련 이벤트만 나열됨):
| 이벤트 유형 | 참고 | |
|---|---|---|
| 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
|
| 취소 가능 | 아니오 |
| 구성됨 | 예 |
| 기본 동작 | 없음 |
| 컨텍스트 (신뢰된 이벤트) |
|
사용자
에이전트는 이벤트 대상이 포커스를 받을 때 이 이벤트를 반드시 디스패치해야 합니다. 포커스는 이 이벤트 유형을 디스패치하기 전에 요소에 주어져야 합니다. 이 이벤트 유형은
focus 이벤트 유형 다음에 디스패치되어야
합니다.
DOMFocusIn
이벤트 유형은 참고와 완전성을 위해 이 명세에 정의되어 있지만, 이 명세는 이 이벤트 유형의 사용을 중단하고 관련 이벤트 유형인 focus 및 focusin을 대신 사용할 것을 권장합니다.
8.2.1.2. DOMFocusOut
| 유형 | DOMFocusOut
|
|---|---|
| 인터페이스 | FocusEvent
|
| 동기 / 비동기 | 동기 |
| 버블링 | 예 |
| 신뢰 가능한 대상 | Window, Element
|
| 취소 가능 | 아니오 |
| 구성됨 | 예 |
| 기본 동작 | 없음 |
| 컨텍스트 (신뢰된 이벤트) |
|
사용자
에이전트는 이벤트 대상이 포커스를 잃을 때 이 이벤트를 반드시 디스패치해야 합니다. 포커스는 이 이벤트 유형을 디스패치하기 전에 요소로부터 제거되어야 합니다. 이 이벤트
유형은 blur 이벤트 유형 다음에 반드시 디스패치되어야
합니다.
DOMFocusOut
이벤트 유형은 참고와 완전성을 위해 이 명세에 정의되어 있지만, 이 명세는 이 이벤트 유형의 사용을 중단하고 관련 이벤트 유형인 blur 및 focusout을 대신 사용할 것을 권장합니다.
8.2.2. 레거시 FocusEvent 이벤트 순서
다음은 포커스가 요소들 간에 이동할 때의 일반적인 이벤트 순서입니다. 여기에는 더 이상 권장되지 않는 DOMFocusIn 및
DOMFocusOut 이벤트가
포함됩니다. 표시된 순서는 초기에는 어떤 요소도 포커스되어 있지 않다고 가정합니다.
| 이벤트 유형 | 참고 | |
|---|---|---|
| 사용자가 포커스를 이동함 | ||
| 1 | focusin
| 첫 번째 대상 요소가 포커스를 받기 전에 전송 |
| 2 | focus
| 첫 번째 대상 요소가 포커스를 받은 후 전송 |
| 3 | DOMFocusIn
| 지원되는 경우 |
| 사용자가 포커스를 이동함 | ||
| 4 | focusout
| 첫 번째 대상 요소가 포커스를 잃기 전에 전송 |
| 5 | focusin
| 두 번째 대상 요소가 포커스를 받기 전에 전송 |
| 6 | blur
| 첫 번째 대상 요소가 포커스를 잃은 후 전송 |
| 7 | DOMFocusOut
| 지원되는 경우 |
| 8 | focus
| 두 번째 대상 요소가 포커스를 받은 후 전송 |
| 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
|
| 취소 가능 | 예 |
| 구성됨 | 예 |
| 기본 동작 | 다양함:
텍스트 합성 시스템(text composition system) 실행;
blur 및 focus 이벤트;
DOMActivate 이벤트;
기타 이벤트
|
| 컨텍스트 (신뢰된 이벤트) |
|
만약
사용자
에이전트가 지원한다면, 이 이벤트는 해당 키가 통상적으로 문자 값을 생성하는 경우에만 키가 눌러질 때 디스패치되어야 합니다. keypress 이벤트 유형은 장치에
따라 다르며 입력 장치의 기능과 운영체제에서의 매핑에 의존합니다.
이 이벤트 유형은 키 매핑 이후에 생성되어야 합니다. 입력 방식 편집기(IME)를 사용할 때는 발생되어서는 안 됩니다.
이 이벤트가 취소되면, input 이벤트가 발생하는
것을 방지해야 하며, 또한 기본 동작을
취소해야 합니다.
저자들은 beforeinput
이벤트를 keypress 이벤트 대신
사용하는 것이 권장됩니다.
keypress 이벤트는 전통적으로
물리적 키보다는 문자 값을 감지하는 데
사용되며, 일부 구성에서는 모든 키에서 이용할 수 없을 수 있습니다.
keypress 이벤트 유형은 참고와
완전성을 위해 이 명세에 정의되어 있지만, 이 명세는 이 이벤트 유형의 사용을 중단(Deprecated)합니다. 편집 문맥에서는 작성자가 대신 beforeinput 이벤트를 구독할 수 있습니다.
8.3.2.
keypress 이벤트 순서
keypress 이벤트 유형은 동일한 키와
관련된 keydown 이벤트 이후 및 keyup 이벤트 이전에 반드시 디스패치되어야
합니다.
keypress 이벤트 유형은 동일한 키와
관련된 beforeinput
이벤트 이후 및 input 이벤트 이전에 반드시
디스패치되어야 합니다.
keypress 이벤트를 지원하는 사용자
에이전트의 키 이벤트 시퀀스는 다음 예시에서 설명됩니다:
| 이벤트 유형 | 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 알고리즘의 Text Event 섹션를 참고하십시오. TextEvent
인터페이스와 textInput 이벤트에 관한
내용입니다.
9. 이벤트 확장
이 절은 참고용입니다
9.1. 소개
이 명세는 여러 인터페이스와 많은 이벤트를 정의하지만, 모든 목적에 대한 포괄적인 이벤트 집합은 아닙니다. 콘텐츠 작성자와 구현자가 원하는 기능을 추가할 수 있도록, 이 명세는 인터페이스와 이벤트 집합을 충돌 없이 확장할 수 있는 두 가지 메커니즘을 제공합니다: 커스텀 이벤트와 구현체별 확장.
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의 벤더별 키워드 접두사와 유사하지만, CSS처럼 대시("-")는
사용하지 않아야 합니다(자바스크립트에서 속성명으로 쓸 때 문제가 될 수 있기 때문).
FooCorp가 새로운
jump 이벤트를 도입하고 싶다고 합시다. 이 벤더는 "foo" 접두사를 붙여 fooJump라는 이벤트를 구현합니다. 얼리어답터들은
someElement.addEventListener("fooJump", doJump, false )로 이벤트를 실험하고, 피드백을 FooCorp에 제공하며,
FooCorp는 fooJump의 동작을 이에 맞게 개선합니다.
어느 시점에 또 다른 벤더 BarOrg
도 이 기능을 원하지만, 약간 다르게 구현하고 싶어 "bar" 접두사로 barJump 이벤트 타입명을 사용합니다. 콘텐츠 작성자는 각각의 이벤트 타입을 별도의 핸들러에 등록하거나, 동일한 핸들러를
사용하면서 이벤트 타입명을 구분해 처리할 수 있습니다. 그래서 초기에 서로 다른 코드베이스에서의 실험이 충돌하지 않고, 얼리어답터는 여러 구현체용 코드를 쉽게 관리할 수 있습니다.
기능이 성숙해지면서 두 브라우저의 동작이 사용자/작성자 피드백이나 표준화 과정을 통해 안정화/수렴할 수 있습니다. 위험이 줄어들면 작성자는 분기 코드를 제거하고, (표준화
이전이라도) jump 이벤트 타입명과 더 일반적인 등록 방식
someElement.addEventListener( "jump", doJump, false)을 사용할 수 있습니다.
9.3.1. 알려진 구현체별 접두사
이 문서 작성 시점에, 다음과 같은 이벤트 타입명 접두사가 사용되고 있습니다:
| 접두사 | 웹 엔진 | 조직 |
|---|---|---|
moz, Moz
| Gecko | Mozilla |
ms, MS
| Trident | Microsoft |
o, O
| Presto | Opera Software |
webkit
| WebKit | Apple, Google, 기타 |
10. 보안 고려사항
이 부록은 UI Events 구현체의 보안 고려사항을 다룹니다. 논의는 이 명세에서 정의된 이벤트 모델, API 및 이벤트의 구현에서 직접 발생하는 보안 이슈로 제한됩니다. 구현체는 일반적으로 이 문서에 정의되지 않은 스크립트 언어, 다른 API 및 추가 이벤트와 같은 기타 기능도 지원합니다. 이러한 기능은 알려지지 않은 요소이며 본 문서의 범위에 포함되지 않습니다. 구현자는 해당 기능의 명세에서 각각의 보안 고려사항을 참조해야 합니다.
이 명세에서 정의된 많은 이벤트 유형은 응답으로 사용자 동작에 따라 디스패치됩니다. 이는 악의적인 이벤트 리스너가 접근할 수 있게 하며 사용자가 일반적으로 기밀로 여길 정보를 얻을 수 있습니다, 예를 들어 양식을 작성할 때 발생할 수 있는 오타, 제출 직전에 선택형 질문에 대한 답을 재고하는 경우에 발생했을 수 있는 내용, 타이핑 속도나 주된 입력 수단. 최악의 경우, 악의적인 이벤트 리스너는 모든 사용자 상호작용을 캡처하고 제3자에게 제출할 수 있으며, 이 수단들은(이 명세에 정의되어 있지 않음) DOM 구현에서 일반적으로 사용 가능한 것들일 수 있습니다, 예를 들어 XMLHttpRequest 인터페이스.
외부 데이터를 로드하는 기능을 지원하는 DOM 구현체에서는, error 이벤트와 같은 이벤트가 컴퓨터 시스템 또는 네트워크 환경에 대한 민감한 정보에 접근할 수 있습니다.
예를 들어, 악의적인 HTML 문서가 로컬 네트워크 또는 localhost의 여러 포트에 리소스를 삽입하려 할 수 있습니다. 삽입된 DOM 애플리케이션은 error 및 load 이벤트를 감시하여, 로컬 시스템에서 접근
가능한 네트워크 내 다른 컴퓨터나 열린 포트를 파악해 추가 공격을 준비할 수 있습니다.
UI Events 만으로는 일반적으로 이러한 종류의 공격을 수행하기에 충분하지 않으며, 해당 공격을 지원할 수 있는 기능의 보안 고려사항이 적용됩니다. 본 명세의 적합성을 위해, DOM
구현체는 DOM 애플리케이션이 기밀 또는 민감한 정보에 접근하지 못하도록 합리적인 조치를 취할 수 있습니다. 예를 들어, 로컬 네트워크 상의 리소스를 삽입하려는 노드에는 load 이벤트를 디스패치하지 않을 수 있습니다.
11. 감사의 글
많은 사람들이 DOM 명세(Level 1, 2 또는 3)에 기여했으며, DOM 워킹 그룹, DOM Interest Group, WebAPI Working Group, WebApps Working Group 참가자들이 포함됩니다. 특히 다음 분들께 감사드립니다:
Andrew Watson (Object Management Group), Andy Heninger (IBM), Angel Diaz (IBM), Anne van Kesteren (Opera Software), Arnaud Le Hors (W3C 및 IBM), Arun Ranganathan (AOL), Ashok Malhotra (IBM 및 Microsoft), Ben Chang (Oracle), Bill Shea (Merrill Lynch), Bill Smith (Sun), Björn Höhrmann, Bob Sutor (IBM), Charles McCathie-Nevile (Opera Software, Co-Chair), Chris Lovett (Microsoft), Chris Wilson (Microsoft), Christophe Jolif (ILOG), David Brownell (Sun), David Ezell (Hewlett-Packard Company), David Singer (IBM), Dean Jackson (W3C, W3C Team Contact), Dimitris Dimitriadis (Improve AB 및 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 및 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 Team Contact 및 전 의장), 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, Co-Chair), 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월 ~ 2011년 10월).
기여자: WebApps Working Group에서 다음 분들은 이 명세의 개선 및 개정 과정에서 실질적인 기여를 하였습니다: 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 또는 표준 문서에서 차용하거나 수정한 것입니다. 자세한 정보는 각 정의 내의 링크를 참고하세요.
- 활성화 트리거
-
활성화 동작(활성화 동작)을 시작하도록 정의된 이벤트입니다.
- 작성자
-
이 명세의 문맥에서 author, content author 또는 script author는 이 명세에서 정의한 인터페이스, 이벤트, 이벤트 흐름을 사용하는 스크립트나 기타 실행 가능한 콘텐츠를 작성하는 사람을 말합니다. 자세한 내용은 § 1.2.3 콘텐츠 작성자 및 콘텐츠 적합성 범주를 참조하십시오.
- body 요소
-
HTML 또는 XHTML 문서에서 body 요소는 문서의 내용을 나타냅니다. 올바르게 구성된 HTML 문서에서 body 요소는 루트 요소의 첫 번째 하위 요소입니다.
- 문자 값
-
키 값의 문맥에서 문자 값은 문자나 기호와 같은 하나 이상의 유니코드 문자를 나타내는 문자열이거나, 각각이 유효한 유니코드 문자 카테고리 집합에 속하는 문자들의 집합을 나타냅니다. 이 명세에서는 문자 값을 유니코드 문자열(예:
U+0020) 또는 동일한 코드 포인트의 글리프 표현(예:" ")으로 표기하며, 이 두 표현을 구별하기 쉽게 색으로 구분합니다.소스 코드에서는 비그래픽 문자와 같은 일부 키 값이 사용 중인 프로그래밍 언어의 문자 이스케이프 문법을 사용하여 표현될 수 있습니다.
- 데드 키
-
데드 키는 그 자체로 문자를 생성하지 않는 키 또는 키 조합이지만, 다른 키와 결합되거나 순차적으로 사용될 때 발음 구별 부호가 있는 문자(예:
"ö","é","â")와 같은 수정된 문자를 생성하는 키입니다. - 기본 동작
-
기본 동작은 이벤트 객체의 디스패치와 결합하여 구현체가 수행해야 하는 선택적 보조 동작입니다. 각 이벤트 유형 정의와 각 명세는 해당 이벤트 유형에 기본 동작이 있다면 그 기본 동작을 정의합니다. 이벤트 인스턴스는 활성화 트리거(활성화 트리거)와 연관되는 경우와 같이 특정 상황에서 둘 이상의 기본 동작을 가질 수 있습니다. 기본 동작은
preventDefault()메서드 호출로 취소될 수 있습니다. - 델타
-
WheelEvent 인터페이스(예: 마우스 휠 또는 터치 패드)를 지원하는 입력 장치의 물리적 움직임에 응답하여 사용자 에이전트가 페이지를 스크롤하거나 확대/축소할 것으로 예상되는 스크롤량(픽셀, 줄, 또는 페이지 단위)입니다. 델타의 값(예:
deltaX,deltaY또는deltaZ속성)은 현재deltaMode속성의 문맥에서 해석되어야 합니다. 휠(또는 다른 장치)의 물리적 움직임과 델타가 양수인지 음수인지의 관계는 환경 및 장치에 따라 다릅니다. 그러나 사용자 에이전트가 스크롤을 기본 동작으로 수행하는 경우, 델타의 부호는 오른손 좌표계에 의해 정해지며 이때 양의 X, Y, Z 축은 각각 문서(문서)의 오른쪽 가장자리, 아래쪽 가장자리 및 가장 먼 깊이(사용자로부터 멀어지는 방향)를 향합니다. - 사용 중단(deprecated)
-
사용 중단으로 표시된 기능은 이전 구현이나 명세에 대한 참조로 명세에 포함되지만 선택 사항이며 권장되지 않습니다. 이 명세에서는 기존 또는 진행 중인 대체 기능이 있는 경우에만 기능을 사용 중단해야 합니다. 해당 기능에 대한 지원을 아직 포함하지 않은 구현체는 기존 콘텐츠와의 하위 호환성을 위해 사용 중단된 기능을 구현할 수 있지만, 콘텐츠를 작성하는 작성자는 다른 방법으로 해결할 수 없는 경우를 제외하고 사용 중단된 기능을 사용해서는 안 됩니다. 이 명세를 참조하는 다른 명세는 사용 중단된 기능을 사용해서는 안 되며 대신 해당 기능이 대체되는 기능을 가리켜야 합니다. 이 명세에서 사용 중단으로 표시된 기능은 향후 명세에서 제거될 것으로 예상됩니다.
- 빈 문자열
-
빈 문자열은 길이
0의DOMString타입 값, 즉 어떠한 문자도(출력 문자나 제어 문자 모두) 포함하지 않는 문자열입니다. - 이벤트 포커스
-
이벤트 포커스는 문서(이벤트 대상이 속하는 문서) 내의 특정 요소나 다른 이벤트 대상에 대한 수용성과 집중의 특수한 상태입니다. 각 요소는 포커스되었을 때 기능에 따라 다른 동작을 하며, 예를 들어 요소를 활성화할 준비를 하거나(버튼이나 하이퍼링크의 경우), 상태를 전환하거나(체크박스의 경우), 텍스트 입력을 받거나(텍스트 폼 필드의 경우), 선택한 텍스트를 복사하는 등의 동작을 합니다. 자세한 내용은 § 3.3.3 문서 포커스 및 포커스 컨텍스트를 참조하십시오.
- 이벤트 포커스 링
-
이벤트 포커스 링은 문서(이벤트 포커스 대상들의) 내에서 순서가 정해진 집합입니다. 호스트 언어는 문서 순서, 포커스 대상별로 정의된 숫자 인덱스, 포커스 대상 간의 명시적 포인터, 또는 여러 모델의 혼합과 같은 대상 순서를 결정하는 하나 이상의 방법을 정의할 수 있습니다. 각 문서는 여러 개의 포커스 링이나 조건부 포커스 링을 가질 수 있습니다. 일반적으로 문서 순서 또는 인덱스된 포커스 링의 경우, 포커스는 마지막 포커스 대상에서 첫 번째 대상으로 "감싸서 돌아갑니다".
- 이벤트 대상
- 이벤트 유형
-
이벤트 유형은 특정 이름을 가진 이벤트 객체로, 특정 트리거 조건, 속성 및 다른 이벤트 유형과 구별되는 기타 특성들을 정의합니다. 예를 들어
keydown이벤트 유형은blur또는load이벤트 유형과 다른 특성을 가집니다. 이벤트 유형은 이벤트 객체의type속성으로 노출됩니다. 또한 느슨하게 "event"라고도 불리며, 예를 들어keydown이벤트처럼 언급됩니다. - 호스트 언어
-
다른 언어나 API 명세의 기능을 통합하되 그 기능을 재정의하지 않고 원래 명세를 규범적으로 참조하며, 원래 명세에서 정의한 방식으로만 기능을 확장하는 모든 언어를 말합니다. 원래 명세는 일반적으로 하나 이상의 호스트 언어의 문맥에서 구현되도록 의도되며 독립 실행형 언어로서 의도되지는 않습니다. 예를 들어 XHTML, HTML, SVG는 UI Events의 호스트 언어이며, 이 명세에서 정의된 객체와 모델을 통합하고 확장합니다.
- 입력기(IME)
- 입력 방식 편집기
-
입력 방식 편집기(IME, 프런트 엔드 프로세서라고도 함)은 키 입력과 이데오그램 또는 다른 문자 간의 변환을 수행하는 애플리케이션으로, 일반적으로 사용자 주도 사전 조회를 통해 이루어지며 동아시아 언어(예: 중국어, 일본어, 한국어)에서 자주 사용됩니다. IME는 모바일 장치에서와 같이 사전 기반 단어 완성에도 사용될 수 있습니다. 이 명세에서 IME의 처리에 대해서는 § 4.3.3 Input Method Editors를 참조하십시오. 또한 텍스트 합성 시스템도 참조하십시오.
- 키 매핑
-
키 매핑은 특정 키에 키 값을 할당하는 과정이며, 운영 체제와 키보드 레이아웃(예: QWERTY, Dvorak, Spanish, InScript, Chinese 등)을 포함한 여러 요인의 조합의 결과입니다. 또한 모든 수정 키(
Shift,Alt등) 및 데드 키 상태들을 고려한 결과입니다. - 키 값
-
키 값은 특정 상태의 키와 연관된 문자 값 또는 다중 문자 문자열(예:
"Enter","Tab", 또는"MediaTrackNext")입니다. 모든 키는 문자 값이 있든 없든 키 값을 가집니다. 여기에는 제어 키, 기능 키, 수정 키, 데드 키 및 기타 모든 키가 포함됩니다. 주어진 키의 키 값은 해당 시점의 키 매핑에 따라 달라집니다. - 수정 키
-
수정 키는 키의 일반적인 동작을 변경하며, 예를 들어 다른 대소문자의 문자를 생성하거나(
Shift키처럼), 키가 트리거하는 기능을 변경합니다(Fn혹은Alt키처럼). 수정 키에 대한 더 많은 정보는 § 4.3.1 수정 키를 참고하고, 유효한 수정 키 목록은 Modifier Keys table [UIEvents-Key] 을 참조하십시오. - 네임스페이스 URI
-
네임스페이스 URI는 XML 네임스페이스를 식별하는 URI입니다. 이는 [XML-Names11]에서 네임스페이스 이름(namespace name)이라고 불립니다. 또한 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 등 다른 인기 있는 키보드 배열들도 많이 있으며, 대부분 지역화나 인체공학을 위해 설계되었습니다. - 루트 요소
-
문서의 첫 번째 요소 노드로, 다른 모든 요소들이 그 자식입니다. 문서 요소를 가리킵니다.
- 텍스트 합성 시스템
-
입력 방식 편집기(input method editor), 음성 처리기 또는 필기 인식 시스템과 같은 형태의 대체 입력을 해석하고 이를 텍스트로 변환하는 소프트웨어 구성 요소입니다.
- 유니코드 문자 카테고리
-
각 유니코드 코드 포인트에 대해 정의된 General Category 값의 부분집합입니다. 이 부분집합에는 문자( Ll, Lm, Lo, Lt, Lu ), 숫자( Nd, Nl, No ), 구두점( Pc, Pd, Pe, Pf, Pi, Po, Ps ) 및 기호( Sc, Sk, Sm, So ) 카테고리 값이 포함됩니다.
- 초기화되지 않은 값
-
이벤트가
bubbles또는currentTarget과 같은 속성들에 대해initEvent()로 초기화되기 이전의 값을 말합니다. 이벤트의 초기화되지 않은 값들은createEvent()메서드를 사용하여 새 이벤트가 생성된 직후에 적용됩니다.