브라우저 이벤트 모델
▶ DOM 레벨 0 이벤트 모델 ◀
[ Event 인스턴스 ]
대부분의 브라우저에서 이벤트 핸들러가 실행될 때 Event 클래스의 인스턴스가 첫 번째 매개변수로 전달.
인터넷 익스플로러는 window의 event 프로퍼티에 Event 인스턴스를 저장.
이 차이점을 해결하려고 다음과 같은 코드를 사용한다.
- if (!event) event = window.event;
표준 브라우저의 경우 target 프로퍼티를 참조하지만 인터넷 익스플로러의 경우 srcElement 프로퍼티를 참조하므로
다음과 같은 코드를 사용하여 해결한다.
- var target = (event.target) ? event.target : event.srcElement;
[ 이벤트 버블링 ]
대상이 된 엘리먼트가 이벤트를 처리할 수 있는 기회를 주고, DOM 트리의 루트까지 반복해서 엘리먼트의 부모를 조사하며 동일한 이벤트 타입의 핸들러가 할당되어있는지 확인하고, 할당되어 있다면 이를 실행한다.
표준 호환 브라우저 : Event 인스턴스의 stopPropagation() 메서드 호출
인터넷 익스플로러 : Event 인스턴스의 cancelBubble 프로퍼티값을 true로 설정
▶ DOM 레벨 2 이벤트 모델 ◀
DOM 레벨 0의 단점을 보완하였으며, 엘리먼트의 특정 이벤트 타입에 한 이벤트 핸들러만 할당할 수 있었던 것을 하나 이상 할당할 수 있게 되었다.
[ 이벤트 할당 ]
addEventListener (eventType, listener, useCapture)
- eventType : 처리할 이벤트 타입을 지정. DOM 레벨 0 이벤트 모델의 이벤트명에서 'on' 접두어를 뺀 것 ( click, mouseover, keydown 등 )
- listener : 핸들러로 할당할 함수의 참조나 인라인 함수
- useCapture : 레벨 2 모델에서 이벤트 전파. Boolean 값을 가진다. false로 설정하면 버블 핸들러로 실행, true로 실행하면 캡처 핸들러로 실행.
[ 이벤트 전파 ]
캡처 단계 : 이벤트를 DOM 트리의 루트에서 대상 엘리먼트로 전파.
버블 단계 : 대상 엘리먼트에서 DOM 트리의 루트로 전파.
※ 캡처 단계는 인터넷 익스플로러가 DOM 레벨 2 이벤트 모델을 지원하지 않기 때문에 거의 사용되지 않는다.
[ 인터넷 익스플로러 이벤트 모델 ]
인터넷 익스플로러의 경우 addEventListener() 메서드가 아니라 attachEvent() 메서드를 각 DOM 엘리먼트에 정의.
- eventName : 핸들러를 추가할 이벤트 타입명
- handler : 핸들러로 덧붙일 함수
이 글은 스프링노트에서 작성되었습니다.
'jQuery' 카테고리의 다른 글
04-2.이벤트 모델 (0) | 2010.02.13 |
---|---|
03-3.엘리먼트 콘텐츠 설정 (0) | 2010.01.23 |
03-2.엘리먼트 스타일 변경 (0) | 2010.01.17 |
03-1.엘리먼트 프로퍼티와 어트리뷰트 조작 (0) | 2010.01.16 |
엘리먼트 집합 생성하기 (0) | 2010.01.12 |