전파 경로 계산
브라우저가 window, document, 조상 요소, target까지의 경로를 정합니다.
이벤트 처리는 요소를 찾고 함수를 붙이는 작업에서 끝나지 않습니다. 어떤 단계에서 실행할지, 기본 동작을 막을지, 상위 요소로 전파할지, 리스너를 언제 제거할지까지 계약으로 고정해야 화면 동작이 흔들리지 않습니다.
브라우저가 window, document, 조상 요소, target까지의 경로를 정합니다.
{ capture: true } 리스너가 바깥에서 안쪽으로
실행됩니다.
실제 클릭·입력 요소의 listener가 실행되고 상태를 읽거나 바꿉니다.
대부분 이벤트는 조상으로 올라가므로 위임 패턴을 만들 수 있습니다.
preventDefault()가 없으면 링크 이동이나 폼 제출이
이어집니다.
list.addEventListener('click', (event) => {
const button = event.target.closest('button[data-id]');
if (!button || !list.contains(button)) return;
removeItem(button.dataset.id);
});
버튼이 나중에 추가되어도 부모 리스너는 유지됩니다. 단,
target만 믿지 말고 closest()와
contains()로 처리 범위를 확인합니다.
preventDefault
브라우저 기본 동작
검증 실패 시 폼 제출 중단
stopPropagation
상위 요소로의 전파
모달 내부 클릭이 배경 닫기를 트리거하지 않게 함
stopImmediatePropagation
같은 요소의 뒤 listener까지 중단
동일 요소에 여러 handler가 붙은 충돌 상황
removeEventListener
같은 함수 참조의 listener
페이지 이탈, 일회성 처리, AbortSignal 정리
querySelector는 첫 요소,
querySelectorAll은 정적 NodeList임을 구분합니다.
사용자 입력은 DOM 속성, 화면 텍스트, CSS 클래스 중 어디를 바꿀지 먼저 정합니다.
동적 요소 제거, 라우트 이동, 모달 닫힘 시 listener와 타이머 정리 지점을 남깁니다.