-
[Javascript] 이벤트 버블링(Event Bubbling), 이벤트 위임(Event Delegation)Java Script 2024. 3. 7. 14:40
자바스크립트에서 이벤트 위임과 이벤트 버블링은
효율적인 이벤트 핸들링을 위해 사용되는 이벤트 핸들링 패턴입니다.이번에 각각에 개념을 확인해 보고, 예시를 통해 어떤 식으로 활용되는지 살펴보려 합니다.
| 이벤트 버블링(Event Bubbling)
이벤트 버블링은 DOM요소에서 이벤트가 발생했을 때, 해당 이벤트가 부모 요소로 전파되는 것을 말합니다.
아래 코드를 보면 버튼을 클릭하면 "자식 요소 클릭", "부모 요소 클릭"이 동시에 출력이 됩니다.
<div id="parent"> <button id="child">클릭</button> </div>
document.getElementById('parent').addEventListener('click', () => { console.log('부모 요소 클릭'); }); document.getElementById('child').addEventListener('click', (e) => { console.log('자식 요소 클릭'); });
만약 이때 "자식 요소 클릭"만 출력되도록 이벤트 버블링을 막고 싶으면
e.stopPopagation()을 자식 요소에 추가해 주면 됩니다.
document.getElementById('parent').addEventListener('click', () => { console.log('부모 요소 클릭'); }); document.getElementById('child').addEventListener('click', (e) => { console.log('자식 요소 클릭'); e.stopPropagation(); // 이벤트 버블링 막기 });
| 이벤트 위임(Event Delegation)
이벤트 버블링을 활용하여 상위 요소에 이벤트 리스너를 추가하면
하위 요소에서 발생한 이벤트도 상위 요소에서 감지할 수 있습니다.이벤트 위임은 이를 활용해 많은 하위 요소에 이벤트를 등록하려 할 때,
모든 요소에 개별적으로 리스너를 추가하는 것이 아닌,
상위 요소에 하나만 등록하여 하위 요소에서 발생한 이벤트를 처리하는 이벤트 핸들링 패턴입니다.아래 코드와 같이 event.target 속성을 통해 실제로 이벤트가 발생한 요소를 식별할 수 있습니다.
<ul id="list"> <li>아이템 1</li> <li>아이템 2</li> <li>아이템 3</li> </ul>
document.getElementById('list').addEventListener('click', (event) => { if (event.target.tagName === 'LI') { console.log('클릭한 아이템:', event.target.textContent); } });
이처럼 리스트들의 상위 요소에 이벤트 핸들러를 등록하고,
클릭된 요소가 li태그 일 경우에 해당 요소의 text를 출력할 수 있습니다.이렇게 하면 새로운 리스트가 추가되어도 이벤트 핸들러를 별도로 등록할 필요가 없습니다.
| 끝
이벤트 위임과 버블링을 잘 활용하면 코드의 유지보수성을 높이는데 도움을 줄 수 있을 거 같습니다.
기존에 대략 알고 있던 개념이지만 실제 프로젝트에서 제대로 이해하고 활용해 본 경험은 많이 없는 거 같아서 이번 기회에 개념을 한번 정리하고 이후에 활용해 보고자 합니다.
'Java Script' 카테고리의 다른 글
[Javascript] (User Agent) 사용자가 접속한 브라우저, 기기 확인하기 (0) 2024.06.11 [Javascript] 이미지 리사이징으로 용량 줄이기 (Canvas API) (2) 2024.03.27 [Javascript] 단축 평가(short circuit evaluation) (1) 2024.02.16 [Java Script] for과 forEach의 차이 및 배열의 비동기 작업 (0) 2023.08.28 [Java Script] 클로저(Closure) (0) 2023.08.19