상세 컨텐츠

본문 제목

Javascript 이벤트 이해

자바스크립트

by happynuri 2008. 3. 24. 19:54

본문

DOM 2.x 규격 및 최신 IE6,7 에서의 이벤트처리를 이해하기란 쉽지 않다.
따라서 이해하기 편하게 그림을 한장 그려봤다.


아마 이미지를 태그로 표현하자면 아래 정도가 될 듯하다.
<body>
    <div id="d1">

         <img id="i1" src="a.gif">

    </div>

</body>

자바스크립트는 개별 Element(태그)를 하나의 이벤트 처리단위로 보고 있다. 따라서 body, div, img는 각각 이벤트를 처리할 수 있는 단위가 된다.



1. DOM 2.x 이벤트 모델 특징

DOM2.x모델의 특징은 하나의 이벤트처리유닛이 여러개의 이벤트를 소유할 수 있다는 점이다.
즉 위 그림에 있는 image의 onclick에 함수를 하나만 거는게 아니라 여러개를 걸 수 있다는 뜻이다.
그런 식으로 사고를 확장해보면 같은 onClick 이란 이벤트만 해도 image에 두어개, div에 두어개, body에 두어개 걸 수 있다는 뜻으로 한번 image위를 클릭하면 저 모든 걸어둔 이벤트가 발동하리란걸 예상할 수 있다.

밑에 자주 등장할 용어인 리스너(listener)는 해당 이벤트를 처리할 함수를 뜻한다. 즉 image에 click이벤트를 여러개 걸었다는 것은 click이벤트를 처리할 리스너(함수)를 여러개 등록했다는 뜻이다.

2. 이벤트 전파단계
그러한 이벤트의 전파를 크게 보면 Capture단계와 Bubbling 단계로 나눌 수 있다.
Capture단계란 위의 그림처럼 화면의 젤 위에서부터 아래로 이벤트가 전파되는 상황을 말한다. 따라서 이때 이벤트를 처리하려면 해당 이벤트 처리기가 Capture단계에서 작동할 것임을 알려줘야한다.
AS3.0, FireFox2.x, Safari3.x, Opera8.x 등 DOM2.x규격을 지키는 프로그램들은 capture단계에서 이벤트가 작동하게 처리할 수 있다.
하지만 IE는 capture단계를 무시한다. 따라서 크로스 플랫폼을 지향한다면 capture단계를 사용해서는 안된다.

bubbling단계에서는 반대로 바닥에 깔린 녀석부터 처리된다. 즉 body에 걸린 이벤트 리스너가 호출되고 div에 걸린게 호출되고 마지막에 image에 걸린 리스너가 호출된다.

그럼 여기서 target단계라는걸 알아보자. target단계라는건 capture단계가 진행중일때 자신에게 이벤트처리할 순번이 돌아온 경우를 말한다. 즉 div입장이라면 capture단계가 진행되다가 div의 이벤트가 호출될 타임이 바로 div입장에서의 target단계라는 것이다.
따라서 당연히 IE엔 capture단계가 없으므로 target단계도 없다.

관련글 더보기

댓글 영역