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, DOMNodeRemovedDOMCaracterDataModified지원합니다.Chrome Safari는 DOMAtrModified를 제외하고 이러한 이벤트를 지원합니다.

터치 이벤트

Apple iOS 및 Google Android와 같은 터치 지원 장치에서 실행되는 웹 브라우저는 추가 [9]: §5.3 이벤트를 생성합니다.

카테고리 유형 기여하다 묘사 거품 취소 가능
만지다 터치 스타트 터치면/스크린에 손가락을 대면 실행됩니다. 네. 네.
터치 터치면/스크린에서 손가락을 떼면 작동합니다. 네. 네.
터치 무브 화면에 이미 배치된 손가락을 화면 전체에 걸쳐 움직였을 때 실행됩니다. 네. 네.
터치 터치 포인트가 DOM 요소에 의해 정의된 대화형 영역으로 이동할 때 실행됩니다. 네. 네.
터치리브 터치 포인트가 DOM 요소에 의해 정의된 인터랙티브영역에서 벗어날 때 기동됩니다. 네. 네.
터치 취소 사용자 에이전트는 이 이벤트유형을 디스패치하여 구현 고유의 방법으로 TouchPoint가 중단되었을 때(UA 창 범위 밖으로 이동했을 경우 등)를 통지해야 합니다.사용자 에이전트는 사용자가 터치 표면에 장치 또는 구현이 저장되도록 구성된 것보다 더 많은 터치 포인트(예를 들어 손가락이나 스타일러스)를 배치한 경우 이 이벤트 유형을 디스패치할 수 있습니다. 이 경우 TouchList의 가장 오래된 터치 포인트 개체는 다음과 같아야 합니다.삭제했다.[9]: §5.9 네. 아니요.

W3C 초안에서는TouchEvent전달하다TouchListTouch로케이션, 액티브했던 수식 키,TouchListTouch대상 DOM 요소 내의 위치 및TouchListTouch이전부터 변경된 위치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에 의해 두 가지 주요 유형의 이벤트가 추가됩니다.일부 이벤트는 다른 브라우저에 의해 사실상의 표준으로 구현되었습니다.

카테고리 유형 기여하다 묘사 거품 취소 가능
클립보드 인하. 온컷 선택 영역이 클립보드로 잘린 후 실행됩니다. 네. 네.
알았다. 온카피 선택 항목을 클립보드에 복사한 후 실행됩니다. 네. 네.
페이스트 온페이스트 클립보드에서 선택 항목을 붙여넣은 후 실행됩니다. 네. 네.
커팅 전 온오프컷 선택 영역을 클립보드로 잘라내기 전에 호출합니다. 네. 네.
카피 전 복사 전 선택 항목을 클립보드에 복사하기 전에 실행됩니다. 네. 네.
붙이기 전에 붙이기 전에 선택 항목을 클립보드에서 붙여넣기 전에 실행됩니다. 네. 네.
데이터 바인딩 업데이트 후 갱신 후 데이터베이스 오브젝트가 갱신된 직후에 기동됩니다. 네. 아니요.
갱신 전 업데이트 전 데이터 소스가 업데이트되기 전에 실행됩니다. 네. 네.
셀체인지 한번 바뀌다 데이터 소스가 변경되었을 때 실행됩니다. 네. 아니요.
이용 가능한 데이터 사용 가능한 데이터 데이터 원본의 새 데이터를 사용할 수 있을 때 실행됩니다. 네. 아니요.
데이터 세트 변경 온데이터셋 변경 데이터 원본의 내용이 변경되었을 때 실행됩니다. 네. 아니요.
데이터 세트 완전 온데이터셋 컴플리트 데이터 원본에서 데이터 전송이 완료되면 실행됩니다. 네. 아니요.
에러 갱신 에러 갱신 데이터 필드 업데이트 중 오류가 발생했을 때 실행됩니다. 네. 아니요.
행입력 행인 데이터 원본에서 새 데이터 행을 사용할 수 있을 때 실행됩니다. 네. 아니요.
록시트 온록시트 데이터 원본의 데이터 행이 방금 끝났을 때 실행됩니다. 아니요. 네.
행 삭제 행 삭제 데이터 원본에서 데이터 행이 삭제될 때 실행됩니다. 네. 아니요.
행 삽입된 행에 삽입되었다 데이터 원본의 데이터 행이 삽입될 때 실행됩니다. 네. 아니요.
마우스 콘텍스트 메뉴 콘텍스트 메뉴 컨텍스트 메뉴가 표시될 때 실행됩니다. 네. 네.
질질 끌다 드래그 마우스 드래그 중에(이동 중인 요소에서) 실행됩니다. 네. 네.
드래그 스타트 드래그 스타트 이동하는 요소에서 마우스 끌기가 시작될 때 실행됩니다. 네. 네.
드래그 엔트리 드라이브 에이전트 대상 요소에서 영역으로 끌면 실행됩니다. 네. 네.
드래그 오버 드래그오버 (대상 요소의) 영역 위에 끌기가 있을 때 실행됩니다. 네. 네.
드래그 리브 온드래그 (타깃 요소에서) 영역 밖으로 무언가가 끌릴 때 실행됩니다. 네. 네.
드래그 엔드 끌어당기다 마우스 끌기가 (이동 중인 요소에서) 종료될 때 실행됩니다. 네. 네.
떨어지다 온드롭 드래그 중에 (타깃 요소에서) 유효한 타겟 위에 마우스 버튼이 놓였을 때 실행됩니다. 네. 네.
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단계를 거칩니다.

  1. 캡처 단계: 이벤트는 루트 이벤트 타깃에서 이벤트의 타깃으로 이동합니다.
  2. 대상 단계: 이벤트는 이벤트 대상을 통과합니다.
  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]현재 가장 많은 크로스 브라우저 모델로 남아 있습니다.인라인 모델과 기존 모델의 두 가지 모델 유형이 있습니다.

인라인 모델

인라인 [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, ChromeKonqueror에서 지원됩니다.

기존 모델에서 사용된 예제의 개서

<!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/

외부 링크

레퍼런스

  1. ^ "DOM Standard". dom.spec.whatwg.org. Retrieved 2021-05-25.
  2. ^ "JavaScript DOM Events". www.w3schools.com. Retrieved 2019-08-03.
  3. ^ "7.8 Drag and drop — HTML5".
  4. ^ "HTML Drag and Drop API".
  5. ^ "Progress Events".
  6. ^ "File API".
  7. ^ "Element: Mousemove event - Web APIs MDN".
  8. ^ "Document Object Model (DOM) Level 3 Events Specification (working draft)". W3C. Retrieved 2013-04-17.
  9. ^ a b c "Touch Events version 2 - W3C Editor's Draft". W3C. 14 November 2011. Retrieved 10 December 2011.
  10. ^ "Apple using patents to undermine open standards again". opera.com. 9 December 2011. Retrieved 9 December 2011.
  11. ^ "Pointer Events".
  12. ^ "IndieUI: Events 1.0".
  13. ^ "HTML Standard".
  14. ^ [1] 2010년 6월 11일 Wayback Machine에서 아카이브 완료
  15. ^ "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 상태를 알 수 없습니다(링크).
  16. ^ "Test Drive Redirect". Archived from the original on 2010-05-08. Retrieved 2010-05-06.
  17. ^ "Introduction to Events". Quirksmode.org. Retrieved 15 September 2012.
  18. ^ a b "Document Object Model (DOM) Level 2 Events Specification". W3C. 13 November 2000. Retrieved 15 September 2012.
  19. ^ "Document Object Model (DOM) Level 3 Events Specification (working draft)". W3C. Retrieved 2013-04-17.
  20. ^ "Early event handlers". Quirksmode.org. Retrieved 15 September 2012.
  21. ^ "Traditional event registration model". Quirksmode.org. Retrieved 15 September 2012.
  22. ^ "DOM Level 3 Events support in IE9". Microsoft. March 26, 2010. Retrieved 2010-03-28.
  23. ^ "Compatibility changes in IE11 Preview". Microsoft. September 9, 2013. Retrieved 2013-10-05.