Hyunjung Im
Frontend Developer
2022-12-27
event propagation에는 3가지 단계가 있다. 이벤트 캡처링 단계, 타겟 단계, 이벤트 버블링 단계이다. 이벤트 캡처링은 최상위 조상에서부터 핸들러가 있는지 확인하고 있다면 실행하는 단계를 이벤트 타겟이 있는 위치까지 반복해서 전파되는 방식이다. 타겟 단계는 이벤트가 타겟에 도착해 실행되는 단계이고, 이벤트 버블링은 이벤트 캡처링과 반대로 이벤트 타겟에서부터 이벤트 핸들러가 있는지 있다면 실행하고, 조상으로 부터 올라가며 이 단계를 반복하는 방법이다.
이벤트 위임이란, 하위의 여러 DOM 요소에 이벤트 핸들러를 할당하는 대신 상위의 DOM요소 하나에만 이벤트 핸들러를 설정해 하위 DOM 요소의 이벤트를 상위 요소에게 위임하는 방법이다. 여러 핸들러를 할당하지 않아도 되어서 메모리의 이점을 가질 수 있다. 이벤트 위임을 하려면 꼭 이벤트 버블링이 일어나야 한다.
이벤트가 발생했을 때 호출될 함수
이벤트 발생시 브라우저에게 이벤트 함수 호출을 위임하는 것
이벤트 핸들러 어트리뷰트 방식(인라인 이벤트 핸들러) 사용하지 말 것
<button onClick="sayHi('alex')">button</button>
var targetBtn = document.getElementById("target");
targetBtn.onclick = function () {
alert("Hello world");
// 실행 >> Hello world
};
addEventListener 메서드 방식
EventTarget.addEventListener('eventType', functionName [, useCapture])
Event 인터페이스, 즉 Event.prototype에 정의되어 있는 이벤트 관련 프로퍼티는 UIEvent, CustomEvent, MouseEvent 등 모든 파생 이벤트 객체에 상속된다.
➡ 즉 Event 인터페이스의 이벤트 관련 프로퍼티는 모든 이벤트 객체 가 상속받는 공통 프로퍼티다.
type
target
currentTarget
eventPhase
(number)bubbles
(boolean)cancelable
defaultPrevented
isTrusted
timeStamp
focus
/blur
load
/unload
/abort
/error
mouseenter
/mouseleave
DOM 요소 노드에서 발생한 이벤트는 DOM 트리를 통해 전파된다. 이를 이벤트 전파라고 한다.
<html>
)에 이벤트 핸들러가 있는지 확인한다. 있다면 그것을 실행하고 내부로 들어와 이벤트 핸들러가 등록된 요소에 닿을 때까지 반복한다.stopPropagation()
을 이용해 버블링을 멈출 수 있지만 추천하지 않는다.event.target
을 이용하면 어디서 이벤트가 발생했는지 알 수 있다. 이를 이용해 이벤트를 핸들링한다.