DOM 이벤트
DOM events![]() |
DOM(Document Object Model) 이벤트는 어떤 일이 발생했거나 발생 중이라는 신호로 사용자의 조작이나 브라우저에 [1]의해 트리거될 수 있습니다.JavaScript, JScript, ECMAScript, VBScript 및 Java와 같은 클라이언트 측 스크립팅 언어는 HTML, XHTML, XUL 및 SVG 문서와 같은 DOM 트리 내의 요소 노드에 다양한 이벤트 핸들러 또는 리스너를 등록할 수 있습니다.
DOM 이벤트의 예:
- 사용자가 마우스를 클릭할 때
- 웹 페이지가 로드된 경우
- 이미지가 로드된 경우
- 마우스를 요소 위로 이동할 때
- 입력 필드가 변경된 경우
- HTML 양식이 전송되는 경우
- 사용자가 키를[2] 누를 때
역사적으로 DOM과 마찬가지로 다양한 웹 브라우저에서 사용되는 이벤트 모델에는 호환성 문제를 일으키는 몇 가지 중요한 차이가 있었습니다.이에 대처하기 위해 이벤트 모델은 DOM 레벨 2의 월드 와이드 웹 컨소시엄(W3C)에 의해 표준화되었습니다.
이벤트
HTML 이벤트
일반적인 이벤트
대부분의 요소 노드에서 생성할 수 있는 이벤트 모음은 다음과 같습니다.
- 마우스 [3][4]이벤트
- 키보드 이벤트
- HTML 프레임/오브젝트 이벤트
- HTML 폼이벤트
- 사용자 인터페이스이벤트
- 변환 이벤트(문서 구조의 변경에 대한 통지)
- 진행[5] 이벤트(XMLHttpRequest, File API에서 사용).[6]
위의 이벤트 분류는 W3C의 분류와 완전히 동일하지 않습니다.
카테고리 | 유형 | 기여하다 | 묘사 | 거품 | 취소 가능 |
---|---|---|---|---|---|
마우스 | 찰칵찰칵 | 클릭 | 포인팅 디바이스 버튼이 요소 위로 클릭되었을 때 실행됩니다.클릭이란, 같은 화면상에 마우스를 올려 놓는 것으로 정의됩니다.이러한 이벤트의 시퀀스는 다음과 같습니다.
| 네. | 네. |
dblick | 온클릭 | 포인팅 디바이스 버튼을 요소 위로 두 번 클릭하면 실행됩니다. | 네. | 네. | |
꺼졌다 | 온마우스다운 | 포인팅 디바이스 버튼을 요소 위에 눌렀을 때 호출됩니다. | 네. | 네. | |
마우스 업 | 온마우스업 | 포인팅 디바이스 버튼이 요소 위에 놓였을 때 실행됩니다. | 네. | 네. | |
마우스 오버 | 온마우스오버 | 포인팅 디바이스가 엘리먼트로 이동했을 때 기동됩니다. | 네. | 네. | |
마우스를[7] 움직이다 | 마우스 이동 | 포인팅 디바이스가 요소 위로 이동했을 때 기동됩니다. | 네. | 네. | |
마우스 아웃 | 온마우스아웃 | 포인팅 디바이스가 요소에서 멀어질 때 기동됩니다. | 네. | 네. | |
드래그 스타트 | 드래그 스타트 | 드래그 시작 시 요소에서 실행됩니다. | 네. | 네. | |
질질 끌다 | 드래그 | 이 이벤트는 드래그 작업 중에 드래그 소스, 즉 드래그스타트가 실행된 요소에서 실행됩니다. | 네. | 네. | |
드래그 엔트리 | 드라이브 에이전트 | 드래그 중에 마우스를 요소 위로 처음 이동할 때 실행됩니다. | 네. | 네. | |
드래그 리브 | 온드래그 | 이 이벤트는 드래그 중에 마우스가 요소를 벗어날 때 발생합니다. | 네. | 아니요. | |
드래그 오버 | 드래그오버 | 이 이벤트는 드래그 발생 시 마우스를 요소 위로 이동할 때 실행됩니다. | 네. | 네. | |
떨어지다 | 온드롭 | 드롭 이벤트는 드래그 조작 종료 시 드롭이 발생한 요소에서 실행됩니다. | 네. | 네. | |
드래그 엔드 | 끌어당기다 | 드래그 작업이 완료되면 드래그 소스는 드래그 엔드 이벤트를 수신합니다. | 네. | 아니요. | |
키보드 | 키다운 | 온키다운 | 키를 누르기 전에 키보드의 키를 눌렀을 때 실행됩니다. | 네. | 네. |
키 누르기 | 키를 누르다 | 키보드의 키를 눌렀을 때, 키다운 후에 기동합니다. | 네. | 네. | |
키업 | 온키업 | 키보드의 키를 놓으면 부팅됩니다. | 네. | 네. | |
HTML 프레임/오브젝트 | 장전 | 부하를 하다 | 사용자 에이전트가 창, 프레임, 객체 및 이미지를 포함하여 문서 내의 모든 컨텐츠 로드를 완료할 때 실행됩니다. 요소의 경우 대상 요소와 모든 콘텐츠 로드가 완료되면 실행됩니다. | 아니요. | 아니요. |
짐을 내리다 | 언로드 | 사용자 에이전트가 창 또는 프레임에서 모든 콘텐츠를 제거할 때 실행됩니다. 요소의 경우 대상 요소 또는 해당 컨텐츠가 제거되었을 때 실행됩니다. | 아니요. | 아니요. | |
중단하다 | 중단하다 | 개체/이미지가 완전히 로드되기 전에 로드되지 않을 때 실행됩니다. | 네. | 아니요. | |
에러 | 온에러 | 오브젝트/이미지/프레임을 올바르게 로드할 수 없을 때 기동됩니다. | 네. | 아니요. | |
크기 조정 | 크기 조정 | 문서 보기의 크기가 조정될 때 실행됩니다. | 네. | 아니요. | |
스크롤 | 온스크롤 | 요소 또는 문서 보기가 스크롤될 때 실행됩니다. | 아니요. 단, 문서의 스크롤 이벤트가 창으로[8] 버블되어야 합니다. | 아니요. | |
HTML 형식 | 선택한다. | 온셀렉트 | 사용자가 입력 및 텍스트 영역을 포함하여 텍스트 필드에서 일부 텍스트를 선택할 때 호출됩니다. | 네. | 아니요. |
바꾸다 | 온체인지 | 컨트롤이 입력 포커스를 잃고 포커스를 얻은 후 값이 변경된 경우 실행됩니다. | 네. | 아니요. | |
제출하다 | 온서밋 | 폼이 송신될 때 기동합니다. | 네. | 네. | |
리셋 | 리셋 중 | 폼이 재설정될 때 부팅됩니다. | 네. | 아니요. | |
초점 | 초점 | 포인팅 디바이스 또는 탭 탐색을 통해 요소가 포커스를 수신할 때 실행됩니다. | 아니요. | 아니요. | |
흐릿하게 하다 | 온블러 | 포인팅 디바이스 또는 탭 네비게이션을 통해 요소가 포커스를 잃었을 때 실행됩니다. | 아니요. | 아니요. | |
사용자 인터페이스 | 포커스인 | (없음) | HTML 포커스 이벤트와 비슷하지만 포커스 가능한 모든 요소에 적용할 수 있습니다. | 네. | 아니요. |
포커스 아웃 | (없음) | HTML의 흐림 이벤트와 비슷하지만 초점을 맞출 수 있는 모든 요소에 적용할 수 있습니다. | 네. | 아니요. | |
DOMActivate | (없음) | XUL 명령어이벤트와 비슷합니다예를 들어 마우스 클릭이나 키 누름 등을 통해 요소가 활성화될 때 실행됩니다. | 네. | 네. | |
돌연변이 | DOMSubtree 변경 완료 | (없음) | 서브트리가 변경되었을 때 기동합니다. | 네. | 아니요. |
삽입된 DOMNode | (없음) | 노드가 다른 노드의 자녀로 추가되었을 때 실행됩니다. | 네. | 아니요. | |
삭제되었다 | (없음) | 노드가 DOM 트리에서 삭제되었을 때 기동됩니다. | 네. | 아니요. | |
DOMNodeRemovedFromDocument | (없음) | 문서에서 노드를 제거할 때 실행됩니다. | 아니요. | 아니요. | |
삽입된 DOMNode문서에 입력 | (없음) | 노드가 문서에 삽입될 때 실행됩니다. | 아니요. | 아니요. | |
DOMAdmitted(DOMAtr수정필) | (없음) | Atribut이 변경되었을 때 기동합니다. | 네. | 아니요. | |
DOMCaracter 데이터 수정 완료 | (없음) | 문자 데이터가 수정되었을 때 호출됩니다. | 네. | 아니요. | |
진보. | 로드 스타트 | (없음) | 진전이 시작되었습니다. | 아니요. | 아니요. |
진보. | (없음) | 진행 중입니다.loadstart가 디스패치된 후. | 아니요. | 아니요. | |
에러 | (없음) | 진행에 실패했습니다.마지막 진행상황이 디스패치된 후 또는 진행상황이 디스패치되지 않은 경우 loadstart가 디스패치된 후. | 아니요. | 아니요. | |
중단하다 | (없음) | 진행이 종료됩니다.마지막 진행상황이 디스패치된 후 또는 진행상황이 디스패치되지 않은 경우 loadstart가 디스패치된 후. | 아니요. | 아니요. | |
장전 | (없음) | 진행이 성공했습니다.마지막 진행상황이 디스패치된 후 또는 진행상황이 디스패치되지 않은 경우 loadstart가 디스패치된 후. | 아니요. | 아니요. | |
로드 엔드 | (없음) | 진행이 중지되었습니다.에러, 중단 또는 부하 중 하나가 디스패치된 경우. | 아니요. | 아니요. |
이름이 "DOM"으로 시작하는 이벤트는 현재 잘 지원되지 않습니다.또, 이것과 그 외의 퍼포먼스상의 이유로, DOM 레벨 3의 W3C 에서는 추천되지 않습니다.Mozilla 및 Opera는 DOMAtrModified, DOMNodeInserted, DOMNodeRemoved 및 DOMCaracterDataModified를 지원합니다.Chrome 및 Safari는 DOMAtrModified를 제외하고 이러한 이벤트를 지원합니다.
터치 이벤트
Apple iOS 및 Google Android와 같은 터치 지원 장치에서 실행되는 웹 브라우저는 추가 [9]: §5.3 이벤트를 생성합니다.
카테고리 | 유형 | 기여하다 | 묘사 | 거품 | 취소 가능 |
---|---|---|---|---|---|
만지다 | 터치 스타트 | 터치면/스크린에 손가락을 대면 실행됩니다. | 네. | 네. | |
터치 | 터치면/스크린에서 손가락을 떼면 작동합니다. | 네. | 네. | ||
터치 무브 | 화면에 이미 배치된 손가락을 화면 전체에 걸쳐 움직였을 때 실행됩니다. | 네. | 네. | ||
터치 | 터치 포인트가 DOM 요소에 의해 정의된 대화형 영역으로 이동할 때 실행됩니다. | 네. | 네. | ||
터치리브 | 터치 포인트가 DOM 요소에 의해 정의된 인터랙티브영역에서 벗어날 때 기동됩니다. | 네. | 네. | ||
터치 취소 | 사용자 에이전트는 이 이벤트유형을 디스패치하여 구현 고유의 방법으로 TouchPoint가 중단되었을 때(UA 창 범위 밖으로 이동했을 경우 등)를 통지해야 합니다.사용자 에이전트는 사용자가 터치 표면에 장치 또는 구현이 저장되도록 구성된 것보다 더 많은 터치 포인트(예를 들어 손가락이나 스타일러스)를 배치한 경우 이 이벤트 유형을 디스패치할 수 있습니다. 이 경우 TouchList의 가장 오래된 터치 포인트 개체는 다음과 같아야 합니다.삭제했다.[9]: §5.9 | 네. | 아니요. |
W3C 초안에서는TouchEvent
전달하다TouchList
의Touch
로케이션, 액티브했던 수식 키,TouchList
의Touch
대상 DOM 요소 내의 위치 및TouchList
의Touch
이전부터 변경된 위치TouchEvent
를 클릭합니다.[9]
애플은 이 워킹그룹에 참여하지 않았고, 추천 [10]과정 후반에 특허를 공개함으로써 터치 이벤트 사양의 W3C 추천을 지연시켰다.
포인터 이벤트
마우스, 터치 패널, 펜 등 다양한 유형의 입력 장치가 있는 장치의 웹 브라우저는 통합된 입력 이벤트를 생성할 수 있습니다.사용자는 어떤 유형의 입력 장치가 눌려 있는지, 그 장치에서 어떤 버튼이 눌려 있는지, 스타일러스 펜이 눌려 있을 때 버튼이 얼마나 강하게 눌려 있는지를 볼 수 있습니다.2013년 10월 현재 이 이벤트는 Internet Explorer 10 및 [11]11에서만 지원됩니다.
카테고리 | 유형 | 기여하다 | 묘사 | 거품 | 취소 가능 |
---|---|---|---|---|---|
포인터 | 포인터 다운 | 포인트 다운 | 포인팅 디바이스 버튼이 활성화되거나 요소 위에 눌렸을 때 실행됩니다. | 네. | 네. |
포인터 업 | 온포인터업 | 포인팅 디바이스 버튼이 요소 위에 놓였을 때 실행됩니다. | 네. | 네. | |
포인터가 취소되다 | 포인트 취소 | 예를 들어 포인터다운이벤트 후에 디바이스가 패닝/줌에 사용되고 있기 때문에 포인팅 디바이스가 이벤트를 계속 생성할 가능성이 낮은 경우에 기동됩니다. | 네. | 네. | |
포인터미브 | 포인터미브 | 포인팅 디바이스가 요소 위로 이동했을 때 기동됩니다. | 네. | 네. | |
포인터 오버 | 온포인터오버 | 포인팅 디바이스가 엘리먼트로 이동했을 때 기동됩니다. | 네. | 네. | |
포인터 아웃 | 온포인트 아웃 | 포인팅 디바이스가 요소에서 멀어질 때 기동됩니다.또한 포인터 업 후 호버링 없이 디바이스를 포인팅하여 기동하거나 그 후에 기동합니다. | 네. | 네. | |
포인트 렌터 | 포인트 렌터 | 포인팅 디바이스가 요소 위로 이동하거나 하위 요소 중 하나에서 호버링을 지원하지 않는 포인팅 디바이스의 버튼을 눌렀을 때 실행됩니다. | 아니요. | 네. | |
포인터 탈퇴 | 온포인트 인터리브 | 포인팅 디바이스가 요소에서 멀어질 때 또는 호버링을 지원하지 않는 포인팅 디바이스의 버튼이 하위 요소 위에 놓였을 때 실행됩니다. | 아니요. | 네. | |
gotpointercapture(캡처) | ongotpo 인터캡처 | 포인터가 setPointerCapture 메서드로 캡처되었을 때 실행됩니다. | 네. | 아니요. | |
로스트 포인트 인터캡처 | onlostpointercapture(온로스트포인터캡처) | 포인터가 releasePointerCapture 메서드에 의해 해방되었을 때 기동됩니다. | 네. | 아니요. |
Indie UI 이벤트
아직 실제로 구현되지 않은 Indie UI 작업 그룹은 웹 애플리케이션 개발자가 [12]다른 플랫폼별 기술 이벤트를 처리할 필요 없이 표준 사용자 상호 작용 이벤트를 지원할 수 있도록 지원하고자 합니다.
특히 소프트웨어 플랫폼, 하드웨어 및 로케일에 따라 사용자 인터페이스 설계 패턴이 다르며 이러한 상호작용이 개인 취향에 따라 더욱 커스터마이즈될 수 있다는 점을 고려할 때 사용 가능한 인터페이스를 스크립팅하는 것은 어려울 수 있습니다.개인은 자신의 시스템에서 인터페이스가 작동하는 방식에 익숙하고 선호하는 인터페이스가 웹 애플리케이션 작성자가 선호하는 인터페이스와 자주 다릅니다.
예를 들어, 웹 응용 프로그램 작성자는 마지막 작업을 취소하려는 사용자의 의도를 가로채려면 다음 모든 이벤트를 "수신"해야 합니다.
- Windows 및 Linux에서 Control+Z를 사용할 수 있습니다.
- Mac OS X의 Command+Z.
- 일부 모바일 장치에서 이벤트를 흔듭니다.
하나의 정규화된 요청을 수신하여 이전 작업을 "실행 취소"하는 것이 더 간단합니다.
카테고리 | 유형 | 묘사 | 거품 | 취소 가능 |
---|---|---|---|---|
부탁한다 | 거절을 취소하다 | 사용자가 이전 작업을 "실행 취소"할 것을 나타냅니다.(UndoManager 인터페이스로 대체될 수 있습니다). | 네. | 네. |
다시 질문하다 | 사용자가 이전에 "언톤 해제"한 작업을 "리도"할 것을 나타냅니다.(UndoManager 인터페이스로 대체될 수 있습니다). | 네. | 아니요. | |
확장 요구 | 사용자가 접힌 섹션(예: 공개 위젯) 또는 계층의 분기 노드(예: 트리 보기)에 있는 정보를 표시하고자 함을 나타냅니다. | 네. | 네. | |
축소 요구 | 사용자가 확장된 섹션(예: 공개 위젯) 또는 계층의 분기 노드(예: 트리 보기)에서 정보를 숨기거나 축소할 것을 나타냅니다. | 네. | 네. | |
요구를 각하하다 | 사용자가 현재 보기를 "삭제"하고 싶어함을 나타냅니다(예: 대화 상자 취소 또는 팝업 메뉴 닫기). | 네. | 네. | |
삭제 요구 | 사용자가 표시된 요소 또는 현재 뷰에서 "삭제" 작업을 시작하려고 함을 나타냅니다. | 네. | 네. | |
포커스 요구 | 방향성 포커스 요구 | 사용자 에이전트가 웹 응용 프로그램에 "방향 포커스" 요청을 보낼 때 시작됩니다.웹 작성자는 표준 브라우저 포커스 및 흐림 이벤트가 충분한 경우 directionalfocusrequest 이벤트를 사용하거나 등록하지 마십시오.이러한 이벤트를 불필요하게 사용하면 성능이 저하되거나 사용자 환경이 저하될 수 있습니다. | 네. | 네. |
선형 초점 요구 | 사용자 에이전트가 웹 응용 프로그램에 "선형 포커스" 요청을 보낼 때 시작됩니다.웹 작성자는 표준 브라우저 포커스 및 흐림 이벤트가 충분한 경우 linearfocus request 이벤트를 사용하거나 등록하지 마십시오.이 이벤트 유형은 데이터 그리드 등 논리적인 다음 요소가 포커스를 맞출 수 없거나 요청될 때까지 DOM에 있는 경우에만 필요합니다.이러한 이벤트를 불필요하게 사용하면 성능이 저하되거나 사용자 환경이 저하될 수 있습니다. | 네. | 네. | |
팔레트 포커스 요구 | 사용자 에이전트가 웹 응용 프로그램에 "팔레트 포커스" 요청을 보낼 때 시작됩니다.이 이벤트를 수신하는 웹 앱 작성자는 웹 애플리케이션의 첫 번째 팔레트로 포커스를 이동하거나 사용 가능한 모든 팔레트 간에 포커스를 순환시켜야 합니다.주의: 팔레트는 비모달 대화상자 또는 인스펙터 창이라고도 합니다. | 네. | 네. | |
툴바 포커스 요구 | 사용자 에이전트가 웹 응용 프로그램에 "도구 모음 포커스" 요청을 보낼 때 시작됩니다.이 이벤트를 수신하는 웹 앱 작성자는 웹 응용 프로그램의 기본 도구 모음으로 포커스를 이동하거나 사용 가능한 모든 도구 모음 간에 포커스를 전환해야 합니다. | 네. | 네. | |
조작 요구 | 이동 요구 | 사용자 에이전트가 웹 응용 프로그램에 x/y 델타 값과 함께 이동 요청을 보낼 때 시작됩니다.예를 들어 개체를 레이아웃 캔버스의 새 위치로 이동할 때 사용됩니다. | 네. | 네. |
팬 리퀘스트 | 사용자 에이전트가 수반되는 x/y 델타 값과 함께 웹 응용 프로그램에 팬 요청을 보낼 때 시작됩니다.예를 들어 지도 또는 다른 사용자 지정 이미지 뷰어를 이동하면서 중앙점을 변경할 때 사용됩니다. | 네. | 네. | |
회전 요구 | 사용자 에이전트가 웹 응용 프로그램에 회전 요청을 보낼 때 시작되며, 그에 수반되는 오리진 x/y 값과 회전 값(도)이 표시됩니다. | 네. | 네. | |
줌 요구 | 사용자 에이전트가 웹 응용 프로그램에 확대/축소 요청을 보낼 때 시작되며, 그에 수반되는 오리진 x/y 값과 확대/축소 배율이 포함됩니다. | 네. | 네. | |
스크롤 요구 | 스크롤 요구 | 사용자 에이전트가 x/y 델타 값 또는 정의된 다른 스크롤 유형 값 중 하나를 포함하여 웹 응용 프로그램에 스크롤 요청을 보낼 때 시작됩니다.작성자는 이 이벤트와 UI 액션을 사용자 지정 스크롤 뷰에서만 사용해야 합니다. | 네. | 네. |
Value Change 요구 | 값 변경 요구 | 사용자 에이전트가 값 변경 요청을 웹 응용 프로그램에 보낼 때 시작됩니다.슬라이더, 회전목마 등 커스텀 레인지 컨트롤에 사용 | 네. | 네. |
Internet Explorer 고유 이벤트
일반(W3C) 이벤트 외에 Internet Explorer에 의해 두 가지 주요 유형의 이벤트가 추가됩니다.일부 이벤트는 다른 브라우저에 의해 사실상의 표준으로 구현되었습니다.
- 클립보드 이벤트
- 데이터 바인딩 [clarification needed]이벤트
카테고리 | 유형 | 기여하다 | 묘사 | 거품 | 취소 가능 |
---|---|---|---|---|---|
클립보드 | 인하. | 온컷 | 선택 영역이 클립보드로 잘린 후 실행됩니다. | 네. | 네. |
알았다. | 온카피 | 선택 항목을 클립보드에 복사한 후 실행됩니다. | 네. | 네. | |
페이스트 | 온페이스트 | 클립보드에서 선택 항목을 붙여넣은 후 실행됩니다. | 네. | 네. | |
커팅 전 | 온오프컷 | 선택 영역을 클립보드로 잘라내기 전에 호출합니다. | 네. | 네. | |
카피 전 | 복사 전 | 선택 항목을 클립보드에 복사하기 전에 실행됩니다. | 네. | 네. | |
붙이기 전에 | 붙이기 전에 | 선택 항목을 클립보드에서 붙여넣기 전에 실행됩니다. | 네. | 네. | |
데이터 바인딩 | 업데이트 후 | 갱신 후 | 데이터베이스 오브젝트가 갱신된 직후에 기동됩니다. | 네. | 아니요. |
갱신 전 | 업데이트 전 | 데이터 소스가 업데이트되기 전에 실행됩니다. | 네. | 네. | |
셀체인지 | 한번 바뀌다 | 데이터 소스가 변경되었을 때 실행됩니다. | 네. | 아니요. | |
이용 가능한 데이터 | 사용 가능한 데이터 | 데이터 원본의 새 데이터를 사용할 수 있을 때 실행됩니다. | 네. | 아니요. | |
데이터 세트 변경 | 온데이터셋 변경 | 데이터 원본의 내용이 변경되었을 때 실행됩니다. | 네. | 아니요. | |
데이터 세트 완전 | 온데이터셋 컴플리트 | 데이터 원본에서 데이터 전송이 완료되면 실행됩니다. | 네. | 아니요. | |
에러 갱신 | 에러 갱신 | 데이터 필드 업데이트 중 오류가 발생했을 때 실행됩니다. | 네. | 아니요. | |
행입력 | 행인 | 데이터 원본에서 새 데이터 행을 사용할 수 있을 때 실행됩니다. | 네. | 아니요. | |
록시트 | 온록시트 | 데이터 원본의 데이터 행이 방금 끝났을 때 실행됩니다. | 아니요. | 네. | |
행 삭제 | 행 삭제 | 데이터 원본에서 데이터 행이 삭제될 때 실행됩니다. | 네. | 아니요. | |
행 삽입된 | 행에 삽입되었다 | 데이터 원본의 데이터 행이 삽입될 때 실행됩니다. | 네. | 아니요. | |
마우스 | 콘텍스트 메뉴 | 콘텍스트 메뉴 | 컨텍스트 메뉴가 표시될 때 실행됩니다. | 네. | 네. |
질질 끌다 | 드래그 | 마우스 드래그 중에(이동 중인 요소에서) 실행됩니다. | 네. | 네. | |
드래그 스타트 | 드래그 스타트 | 이동하는 요소에서 마우스 끌기가 시작될 때 실행됩니다. | 네. | 네. | |
드래그 엔트리 | 드라이브 에이전트 | 대상 요소에서 영역으로 끌면 실행됩니다. | 네. | 네. | |
드래그 오버 | 드래그오버 | (대상 요소의) 영역 위에 끌기가 있을 때 실행됩니다. | 네. | 네. | |
드래그 리브 | 온드래그 | (타깃 요소에서) 영역 밖으로 무언가가 끌릴 때 실행됩니다. | 네. | 네. | |
드래그 엔드 | 끌어당기다 | 마우스 끌기가 (이동 중인 요소에서) 종료될 때 실행됩니다. | 네. | 네. | |
떨어지다 | 온드롭 | 드래그 중에 (타깃 요소에서) 유효한 타겟 위에 마우스 버튼이 놓였을 때 실행됩니다. | 네. | 네. | |
select start(선택 시작) | 온셀렉트 스타트 | 사용자가 텍스트를 선택하기 시작할 때 실행됩니다. | 네. | 네. | |
키보드 | 도와 주세요. | 온헬프 | 사용자가 도움말을 시작할 때 실행됩니다. | 네. | 네. |
HTML 프레임/오브젝트 | 언로드하기 전에 | 언로드 전 | 문서가 언로드되기 전에 실행됩니다. | 아니요. | 네. |
이제 그만 | 온스톱 | 사용자가 개체 로드를 중지할 때 실행됩니다.(중단과 달리 정지 이벤트를 문서에 첨부할 수 있음) | 아니요. | 아니요. | |
HTML 형식 | 편집 전 포커스 | 편집 전 포커스 | 요소가 편집에 초점을 맞추기 전에 실행됩니다. | 네. | 네. |
마키 | 개시하다 | 기동시의 | 마크가 새로운 루프를 시작할 때 기동됩니다. | 아니요. | 아니요. |
끝내라. | 끝나다 | marquee 루프가 완료되면 기동합니다. | 아니요. | 네. | |
튀다 | 온바운스 | 스크롤 중인 마크가 반대 방향으로 되돌아올 때 실행됩니다. | 아니요. | 네. | |
여러가지 종류의 | 인쇄 전 | 인쇄 전 | 문서가 인쇄되기 전에 실행됩니다. | 아니요. | 아니요. |
애프터프린트 | 애프터 프린트 | 문서를 인쇄한 직후에 기동합니다. | 아니요. | 아니요. | |
속성 변경 | 속성 변경 | 개체의 속성이 변경되었을 때 실행됩니다. | 아니요. | 아니요. | |
필터 변경 | 온필터체인지 | 필터가 속성을 변경하거나 전환을 완료할 때 실행됩니다. | 아니요. | 아니요. | |
레디스테이트 | 준비 상태 변경 | 요소의 readyState 속성이 변경되었을 때 실행됩니다. | 아니요. | 아니요. | |
캡처 | 캡처 시 | releaseCapture 메서드가 호출되었을 때 실행됩니다. | 아니요. | 아니요. |
Mozilla, Safari 및 Opera는 XMLHttpRequest 객체에 대한 readystatechange 이벤트도 지원합니다.또한 Mozilla는 기존 이벤트 등록 방식(DOM 레벨 0)을 사용하여 언로드 전 이벤트를 지원합니다.Mozilla 및 Safari도 컨텍스트 메뉴를 지원하지만 Mac용 Internet Explorer는 지원하지 않습니다.
Firefox 6 이상에서는 인쇄 전 이벤트와 인쇄 후 이벤트가 지원됩니다.
XUL 이벤트
일반적인(W3C) 이벤트와 더불어 Mozilla는 XUL [citation needed]요소에서만 작동하는 일련의 이벤트를 정의했습니다.
카테고리 | 유형 | 기여하다 | 묘사 | 거품 | 취소 가능 |
---|---|---|---|---|---|
마우스 | DOMMuse Scroll | DOMMuse Scroll | 마우스 휠이 이동하면 실행되어 콘텐츠가 스크롤됩니다. | 네. | 네. |
드래그 드롭 | 드래그 드롭 | 사용자가 마우스 단추를 놓으면 끌려는 개체를 놓을 때 실행됩니다. | 아니요. | 아니요. | |
드래그 엔트리 | 드라이브 에이전트 | 드래그 중에 마우스 포인터가 요소 위로 처음 이동할 때 실행됩니다.마우스 오버 이벤트와 유사하지만 끌 때 발생합니다. | 아니요. | 아니요. | |
드라지시트 | 디스크렉시트 | 드래그 중에 마우스 포인터가 요소에서 멀어질 때 실행됩니다.엘리먼트를 떨어뜨린 후 호출하기도 합니다.마우스 아웃 이벤트와 유사하지만 끌 때 발생합니다. | 아니요. | 아니요. | |
드래그 제스처 | 드래그제큐어 | 사용자가 요소를 끌기 시작할 때 일반적으로 마우스 버튼을 누른 상태에서 마우스를 이동하면 실행됩니다. | 아니요. | 아니요. | |
드래그 오버 | 드래그오버 | 마우스 이동 이벤트와 관련하여 이 이벤트는 요소 위로 무언가를 끌어다 놓을 때 발생합니다. | 아니요. | 아니요. | |
입력 | Checkbox State Change(체크박스 상태 변경) | 사용자 또는 스크립트에 의해 체크박스가 온 또는 오프되었을 때 기동됩니다. | 아니요. | 아니요. | |
Radio State Change | 사용자 또는 스크립트에 의해 옵션버튼이 선택되었을 때 기동됩니다. | 아니요. | 아니요. | ||
가까운. | 근접한 | 창 닫기 요청이 있을 때 실행됩니다. | 아니요. | 네. | |
명령어 | 온보드 | W3C DOMActivate 이벤트와 유사합니다.예를 들어 마우스 클릭이나 키 누름 등을 통해 요소가 활성화될 때 실행됩니다. | 아니요. | 아니요. | |
입력 | 온입력 | 사용자가 텍스트 상자에 텍스트를 입력할 때 실행됩니다. | 네. | 아니요. | |
사용자 인터페이스 | DOMMenuItemActive | DOMMenuItemActive | 메뉴 또는 메뉴 항목이 강조 표시될 때 실행됩니다. | 네. | 아니요. |
DOMMenu 항목활발하지 않은 | DOMMenu 항목활발하지 않은 | 메뉴 또는 메뉴 항목이 더 이상 강조 표시되지 않을 때 실행됩니다. | 네. | 아니요. | |
콘텍스트 메뉴 | 콘텍스트 메뉴 | 사용자가 요소의 컨텍스트메뉴를 열도록 요구했을 때 기동됩니다.이 조작은 플랫폼에 따라 다르지만 일반적으로 오른쪽 클릭을 합니다. | 아니요. | 네. | |
넘치다 | 오버플로우 | 상자 또는 다른 레이아웃 요소를 풀사이즈로 표시하기에 충분한 공간이 없을 때 실행합니다. | 아니요. | 아니요. | |
오버플로우 변경 | 오버플로우 변경 | 오버플로우 상태가 변화했을 때 기동합니다. | 아니요. | 아니요. | |
언더플로우 | 언더플로우 | 요소를 풀사이즈로 표시하기에 충분한 공간이 확보되면 요소에 대해 기동합니다. | 아니요. | 아니요. | |
팝업 숨김 | 팝업 표시 안 함 | 숨긴 후 팝업이 나타납니다. | 아니요. | 아니요. | |
팝업 숨김 | 온팝업 | 팝업이 숨겨지려고 할 때 팝업이 표시됩니다. | 아니요. | 아니요. | |
팝업 표시 | 팝업 표시 | 팝업이 열리기 직전에 팝업이 표시됩니다. | 아니요. | 네. | |
팝업 표시 | 팝업 표시 | 온로드 이벤트가 열렸을 때 창으로 전송되는 것과 마찬가지로 열린 후 팝업이 나타납니다. | 아니요. | 아니요. | |
명령어 | 브로드캐스트 | 온브로드캐스트 | 옵저버 위에 놓입니다.브로드캐스트이벤트는 청취 중인 방송사의 속성이 변경되었을 때 전송됩니다. | 아니요. | 아니요. |
명령어 갱신 | commandupdate 업데이트 | 명령어 갱신이 발생했을 때 기동합니다. | 아니요. | 아니요. |
기타 이벤트
Mozilla 및 Opera 9의 경우 DOM Content Loaded 및 DOMFrame Content Loaded라고 하는 문서화되어 있지 않은 이벤트도 있습니다.이 이벤트는 DOM 콘텐츠가 로드되었을 때 실행됩니다.관련 파일(예: 이미지)을 로드하기 전에 실행되므로 "로드"와는 다릅니다.다만, HTML 5 [13]사양에 DOMContentLoaded 가 추가되었습니다.DOMContentLoaded 이벤트는 Webkit 렌더링 엔진 빌드 500+[14][15]에서도 구현되었습니다.이것은 Google Chrome 및 Safari 3.1+의 모든 버전과 관련이 있습니다.DOMContentLoaded는 Internet Explorer [16]9에도 구현되어 있습니다.
Opera 9는 Web Forms 2.0 이벤트 DOM Control Value Changed, invalid, 폼 입력 및 폼 변경도 지원합니다.
이벤트 흐름
두 이벤트 대상이 트리에 참여하는 상황을 고려합니다.둘 다 동일한 이벤트 유형에 등록된 이벤트 수신기가 있습니다. "클릭"이라고 합니다.사용자가 내부 요소를 클릭하면 다음 두 가지 방법으로 처리할 수 있습니다.
- 외부에서 내부로 요소를 트리거합니다(이벤트 캡처).이 모델은 Netscape Navigator에 구현되어 있습니다.
- 요소를 내부로부터 외부로 트리거합니다(이벤트 버블링).이 모델은 Internet Explorer 및 기타 [17]브라우저에 구현되어 있습니다.
W3C는 이 [18]: §1.2 투쟁에서 중간 위치를 차지하고 있습니다.
W3C에 따르면 이벤트타깃이 트리에 참여하면 이벤트는 다음 3단계를 거칩니다.
- 캡처 단계: 이벤트는 루트 이벤트 타깃에서 이벤트의 타깃으로 이동합니다.
- 대상 단계: 이벤트는 이벤트 대상을 통과합니다.
- 버블 단계(옵션): 이벤트는 이벤트 타깃에서 루트 이벤트 타깃으로 역방향으로 이동합니다.버블 단계는 버블이 발생한 이벤트에 대해서만 발생합니다(여기서
event.bubbles == true
)
이 이벤트 흐름의 시각화는 https://domevents.dev에서 확인할 수 있습니다.
이벤트 중지
이벤트가 이벤트 청취자를 통해 이동하는 동안 이벤트는 다음과 같이 중지할 수 있습니다.event.stopPropagation()
또는event.stopImmediatePropagation()
event.stopPropagation()
: 현재 이벤트 국면에서 현재 이벤트 대상에 연결된 모든 이벤트 리스너가 종료되면 이벤트가 중지됩니다.event.stopImmediatePropagation()
: 이벤트는 즉시 중지되며 이후 이벤트 청취자는 실행되지 않습니다.
이벤트가 중지되면 이벤트 경로를 따라 더 이상 이동하지 않습니다.이벤트를 중지해도 이벤트는 취소되지 않습니다.
이벤트를 정지하는 레거시 메커니즘
- 설정
event.cancelBubble
로.true
(Internet Explorer) - 설정
event.returnValue
의 재산.false
이벤트 취소 중
A cancelable
콜을 통해 이벤트를 취소할 수 있습니다.event.preventDefault()
이벤트를 취소하면 해당 이벤트의 기본 브라우저 동작에서 제외됩니다.이벤트가 취소되면event.defaultPrevented
속성이 로 설정됩니다.true
. 이벤트를 취소해도 이벤트가 이벤트 경로를 따라 이동하는 것은 중지되지 않습니다.
이벤트 오브젝트
Event 객체는 대상 요소, 키 누르기, 마우스 버튼 누르기, 마우스 위치 등 특정 이벤트에 대한 많은 정보를 제공합니다.유감스럽게도 이 영역에는 매우 심각한 브라우저 비호환성이 있습니다.따라서 이 문서에서는 W3C 이벤트 오브젝트만 설명합니다.
이름. | 유형 | 묘사 |
---|---|---|
유형 | DOMString(DOMString(도밍) | 이벤트 이름(DOM 레벨2에서는 대소문자가 구분되지만 DOM 레벨3에서는 대소문자가 구분됩니다). |
타깃 | 이벤트 타깃 | 이벤트가 원래 디스패치된 EventTarget을 나타내기 위해 사용합니다. |
current Target(타깃) | 이벤트 타깃 | EventListener가 현재 처리 중인 EventTarget을 나타내기 위해 사용됩니다. |
이벤트 위상 | 부호 없는 쇼트 | 현재 평가되고 있는 이벤트흐름의 국면을 나타내기 위해 사용합니다. |
거품 | 부울 | 이벤트가 버블링 이벤트인지 여부를 나타내기 위해 사용됩니다. |
취소할 수 있다 | 부울 | 이벤트가 기본 액션을 차단할 수 있는지 여부를 나타내기 위해 사용됩니다. |
타임스탬프 | DOMTime 스탬프 | 이벤트가 생성된 시간(에폭에 상대적인 밀리초)을 지정하기 위해 사용됩니다. |
이름. | 인수 유형 | 인수명 | 묘사 |
---|---|---|---|
전파를 정지 | 이벤트 흐름 중에 이벤트가 더 이상 전파되지 않도록 합니다. | ||
prevent Default(기본값) | 취소할 수 있는 경우 이벤트를 취소합니다.즉, 이벤트의 결과로 구현에 의해 일반적으로 실행되는 기본 액션은 발생하지 않습니다. | ||
초기화 이벤트 | DOMString(DOMString(도밍) | eventTypeArg | 이벤트 유형을 지정합니다. |
부울 | 버블알그 | 이벤트가 버블이 될 수 있는지 여부를 지정합니다. | |
부울 | 취소 가능한 Arg | 이벤트의 기본 작업을 방지할 수 있는지 여부를 지정합니다. |
이벤트 처리 모델
DOM 레벨 0
이 이벤트 처리 모델은 Netscape Navigator에 의해 도입되었으며 2005년 [citation needed]현재[update] 가장 많은 크로스 브라우저 모델로 남아 있습니다.인라인 모델과 기존 모델의 두 가지 모델 유형이 있습니다.
인라인 모델
인라인 [20]모델에서는 이벤트핸들러가 요소의 속성으로 추가됩니다.다음 예제에서는 하이퍼링크를 클릭한 후 "Hey Joe" 메시지가 포함된 경보 대화 상자가 나타납니다.기본 클릭 액션은 이벤트 핸들러에서 false를 반환함으로써 취소됩니다.
<!doctpe html> <backet lang="en"> <head> <backet charset="utf-8"> <backet>인라인 이벤트 처리 </title> </head> </body> <h1> 인라인 이벤트 처리 </h1> <p> Hey <a href="http://www.example.com" onclick="trigger"Alert('Joe'); false를 반환한다;"> Joe!</p> <스크립트> 함수 트리거Alert(name) { 창.alert("Hey " + name"); } </script> </body> </html>
인라인 모델의 일반적인 오해[citation needed] 중 하나는 이벤트핸들러를 커스텀인수로 등록할 수 있다고 믿는 것입니다.name
에서triggerAlert
기능.위의 예에서는 그렇게 보일 수 있지만, 실제로 일어나고 있는 일은 브라우저의 JavaScript 엔진에 의해 어나니머스 함수가 생성되고 있습니다.onclick
기여하다.그onclick
요소의 핸들러는 다음과 같은 어나니머스 함수에 바인드됩니다.
기능. () { 트리거 경보('조'); 돌아가다 거짓의; }
JavaScript 이벤트모델의 이러한 제한은 보통 이벤트핸들러의 함수 오브젝트에 속성을 할당하거나 클로저를 사용함으로써 해결됩니다.
종래의 모델
기존 [21]모델에서는 이벤트핸들러는 스크립트에 의해 추가 또는 삭제할 수 있습니다.인라인 모델과 마찬가지로 각 이벤트에 등록할 수 있는 이벤트핸들러는 1개뿐이에요이벤트는 핸들러 이름을 요소 객체의 이벤트 속성에 할당함으로써 추가됩니다.이벤트 핸들러를 삭제하려면 속성을 null로 설정합니다.
<!doctpe html> <backet lang="en"> <head> <backet charset="utf-8"> <backet>종래의 이벤트 처리</title></head><h1>종래의 이벤트 처리</h1><p>Hey Joe!</p> <script> var 트리거경고 = 기능() { 창.alert("Hey Joe"); }; // 이벤트 핸들러 문서를 할당합니다.onclick = 트리거경고; // 다른 이벤트 핸들러 window.onload = 트리거 할당Alert; // 방금 할당된 window.onload = null; </script> </body> </body> 이벤트 핸들러를 삭제합니다.
매개 변수를 추가하려면:
변화하다 이름. = '조'; 문서.클릭 = (기능. (이름.) { 돌아가다 기능. () { 경계.('이봐' + 이름. + '!'); }; }(이름.));
내부 함수는 해당 범위를 유지합니다.
DOM 레벨 2
W3C는 DOM 레벨2에서 [18]보다 유연한 이벤트 처리 모델을 설계했습니다.
이름. | 묘사 | 인수 유형 | 인수명 |
---|---|---|---|
addEventListener | 이벤트 타겟에 이벤트청취자를 등록할 수 있습니다. | DOMString(DOMString(도밍) | 유형 |
이벤트 리스트너 | 청취자 | ||
부울 | useCapture 캡처 | ||
remove Event Listener | 이벤트 타깃에서 이벤트청취자를 삭제할 수 있습니다. | DOMString(DOMString(도밍) | 유형 |
이벤트 리스트너 | 청취자 | ||
부울 | useCapture 캡처 | ||
디스패치 이벤트 | 서브스크라이브된 이벤트청취자에게 이벤트를 송신할 수 있습니다. | 이벤트 | 에바토 |
알아야 할 유용한 정보:
- 이벤트가 거품이 끼지 않도록 개발자는
stopPropagation()
이벤트 객체의 메서드. - 이벤트의 기본 액션이 호출되지 않도록 하려면 개발자는
preventDefault()
이벤트 객체의 메서드.
기존 모델과의 주요 차이점은 동일한 이벤트에 대해 여러 이벤트 핸들러를 등록할 수 있다는 것입니다.그useCapture
옵션을 사용하면 버블링 단계가 아닌 캡처 단계에서 핸들러를 호출하도록 지정할 수도 있습니다.이 모델은 Mozilla, Opera, Safari, Chrome 및 Konqueror에서 지원됩니다.
기존 모델에서 사용된 예제의 개서
<!doctpe html> <backet lang="en"> <head> <backet charset="utf-8"> <backet>DOM 레벨 2 </title> </head> <h1> DOM 레벨 2 </h1> <p> Hey Joe!</p> <script> var heyJoe = 함수() { 창.alert("Hey Joe!"), } // 이벤트 핸들러 문서를 추가합니다.addEventListener("클릭", heyJoe, true"); // 캡처 단계 // 추가 이벤트 핸들러 창을 추가합니다.addEventListener("load"), heyJoe, false ); // 버블 단계 // 추가된 이벤트 핸들러를 제거합니다.
Internet Explorer 고유 모델
버전 8 이전의 Microsoft Internet Explorer는 W3C 표준을 승인하기 전에 자체 모델이 작성되었기 때문에 W3C 모델을 따르지 않습니다.Internet Explorer 9는 DOM 레벨3 [22]이벤트를 따르고 Internet Explorer 11은 Microsoft 고유 [23]모델에 대한 지원을 삭제합니다.
이름. | 묘사 | 인수 유형 | 인수명 |
---|---|---|---|
attach Event(이벤트) | W3C의 addEventListener 메서드와 유사합니다. | 스트링 | 이벤트 |
포인터 | fpNotify(알림) | ||
detach Event(이벤트 분리) | W3C의 removeEventListener 메서드와 유사합니다. | 스트링 | 이벤트 |
포인터 | fpNotify(알림) | ||
fire 이벤트 | W3C의 dispatch Event 메서드와 유사합니다. | 스트링 | 이벤트 |
이벤트 | oEvent Object(이벤트 오브젝트) |
알아야 할 유용한 정보:
- 이벤트 버블을 방지하기 위해 개발자는 이벤트 버블을 설정해야 합니다.
cancelBubble
소유물. - 이벤트의 기본 액션이 호출되지 않도록 하려면 개발자는 이벤트의 기본 액션을 설정해야 합니다.
returnValue
소유물. - 키워드는 글로벌오브젝트를 참조합니다.
이 모델은 동일한 이벤트에 대해 여러 이벤트 핸들러를 등록할 수 있다는 점에서 기존 모델과 다릅니다.하지만, 그useCapture
옵션을 사용하여 캡처 단계에서 핸들러를 호출하도록 지정할 수 없습니다.이 모델은 Microsoft Internet Explorer 및 Trident 기반 브라우저(Maxthon, Avant Browser 등)에서 지원됩니다.
이전 Internet Explorer 고유 모델에서 사용된 예제의 개서
<!doctpe html> <backet lang="en"> <head> <backet charset="utf-8"> <backet>Internet Explorer 고유 모델 </title> </head> <h1>Internet Explorer 고유의 모델 </h1> <p> Hey Joe!</p> <script> var heyJoe = 함수() { 창.alert("Hey Joe!"), } // 이벤트 핸들러 문서를 추가합니다.attachEvent("onclick", heyJoe), // 다른 이벤트 핸들러 창을 추가합니다.attachEvent("onload", heyJoe), // 추가된 이벤트 핸들러를 삭제합니다.detachEvent("onload", heyJoe); </t> </body>
레퍼런스
- 디텔, 하비(2002).인터넷 및 월드 와이드 웹: 프로그램 방법 (제2판). ISBN0-13-030897-8
- Mozilla 조직.(2009).DOM 이벤트 레퍼런스2009년 8월 25일 취득.
- Quirksmode (2008년)이벤트 호환성 테이블2008년 11월 27일 취득.
- http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/
외부 링크
- 문서 객체 모델(DOM) 레벨 2 이벤트 사양
- 문서 객체 모델(DOM) 레벨 3 이벤트 작업 초안
- DOM4: 이벤트 (편집자 초안)
- UI 이벤트 작업 초안
- 포인터 이벤트 W3C 후보 권장 사항
- MSDN 포인터 이벤트
- domenvents.dev - 탐색을 통해 DOM 이벤트에 대해 알아보는 비주얼라이저
- 이벤트 버블링 및 캡처용 JS 바이올린
레퍼런스
- ^ "DOM Standard". dom.spec.whatwg.org. Retrieved 2021-05-25.
- ^ "JavaScript DOM Events". www.w3schools.com. Retrieved 2019-08-03.
- ^ "7.8 Drag and drop — HTML5".
- ^ "HTML Drag and Drop API".
- ^ "Progress Events".
- ^ "File API".
- ^ "Element: Mousemove event - Web APIs MDN".
- ^ "Document Object Model (DOM) Level 3 Events Specification (working draft)". W3C. Retrieved 2013-04-17.
- ^ a b c "Touch Events version 2 - W3C Editor's Draft". W3C. 14 November 2011. Retrieved 10 December 2011.
- ^ "Apple using patents to undermine open standards again". opera.com. 9 December 2011. Retrieved 9 December 2011.
- ^ "Pointer Events".
- ^ "IndieUI: Events 1.0".
- ^ "HTML Standard".
- ^ [1] 2010년 6월 11일 Wayback Machine에서 아카이브 완료
- ^ "Which browsers support native DOMContentLoaded event? « Perfection Labs Development Tips". 29 June 2011. Archived from the original on 29 June 2011.
{{cite web}}
: CS1 maint: bot: 원래 URL 상태를 알 수 없습니다(링크). - ^ "Test Drive Redirect". Archived from the original on 2010-05-08. Retrieved 2010-05-06.
- ^ "Introduction to Events". Quirksmode.org. Retrieved 15 September 2012.
- ^ a b "Document Object Model (DOM) Level 2 Events Specification". W3C. 13 November 2000. Retrieved 15 September 2012.
- ^ "Document Object Model (DOM) Level 3 Events Specification (working draft)". W3C. Retrieved 2013-04-17.
- ^ "Early event handlers". Quirksmode.org. Retrieved 15 September 2012.
- ^ "Traditional event registration model". Quirksmode.org. Retrieved 15 September 2012.
- ^ "DOM Level 3 Events support in IE9". Microsoft. March 26, 2010. Retrieved 2010-03-28.
- ^ "Compatibility changes in IE11 Preview". Microsoft. September 9, 2013. Retrieved 2013-10-05.