Javascript의 이벤트 위임
소개
대부분의 경우 웹 페이지에 이벤트를 추가해야 하므로 웹 페이지 성능을 개선하기 위해 이벤트 핸들러를 처리하는 멋진 기술을 제공하는 이벤트 위임을 사용합니다.
이벤트 위임은 웹 페이지에서 더 나은 방식으로 이벤트를 처리하는 기술입니다. 이벤트가 DOM 트리의 계층 구조까지 전파되는 방식 때문에 가능합니다.
이벤트 위임은 이벤트 버블링에 따라 다릅니다. 이 시리즈의 이전 기사에서 자세한 내용을 읽을 수 있습니다.
이제 이러한 개념에 대해 자세히 살펴보겠습니다.
이벤트 위임
Event delegation allows us to attach a single event listener, to a parent element, that will fire for all descendants matching a selector, whether those descendants exist now or are added in the future.
아이디어는 유사한 방식으로 처리되는 많은 요소가 있는 경우 각 요소에 처리기를 할당하는 대신 공통 조상에 단일 처리기를 배치한다는 것입니다.
예를 들어 이해해 봅시다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<ul id="category">
<li id="books">Books</li>
<li id="camera">Camera</li>
<li id="sports">Sports</li>
</ul>
<script src="index.js"></script>
</body>
</html>
위의 코드 스니펫에서는 사용자가
li
요소를 클릭할 때마다 몇 가지 특정 작업을 수행하려고 합니다. 콘솔에 특정li
요소를 인쇄하고 싶다고 가정해 보겠습니다.이를 수행하는 한 가지 방법은 아래 코드 스니펫과 같이 각
li
요소에 이벤트 리스너를 연결하는 것입니다.document.querySelector('#books').addEventListener('click', (e)=>{
console.log(e.target.id);
})
document.querySelector('#camera').addEventListener('click', (e)=>{
console.log(e.target.id);
})
document.querySelector('#sports').addEventListener('click', (e)=>{
console.log(e.target.id);
})
이미 알고 있듯이 이 기능을 구현하는 데 최적화된 방법은 아닙니다. 앞으로 더 많은
li
요소가 추가되어 더 많은 코드를 추가하고 규칙을 위반할 가능성이 있습니다. 반복하지 마십시오.이벤트 위임을 사용하여 동일한 것을 구현하는 방법을 살펴보겠습니다.
document.querySelector('#category').addEventListener('click', (e) => {
if (e.target.tagName == 'LI') {
console.log(e.target.id);
}
})
위의 코드 스니펫에서 핸들러를 각
li
요소에 연결하는 대신 공통 상위 요소ul
에 단일 핸들러를 배치하고 이벤트 버블링 개념을 사용하여 동일한 기능을 구현합니다."행동" 패턴
또한 이벤트 위임을 사용하여 특수 속성 및 클래스를 사용하여 선언적으로 요소에 "동작"을 추가할 수 있습니다.
패턴에는 두 부분이 있습니다.
이제 다음 예를 살펴보십시오.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="operation">
<input type="text" value="10" data-action="increase">
<input type="text" value="10" data-action="decrease">
</div>
<script src="index.js"></script>
</body>
</html>
예를 들어 여기 속성
data-action
은 입력에 "클릭 시 값 증가/감소"동작을 추가합니다.document.querySelector('#operation').addEventListener('click', (e) => {
let action = e.target.dataset.action;
switch (action) {
case "increase":
e.target.value++;
break;
case "decrease":
e.target.value--;
break;
}
})
data-action
에는 원하는 만큼 속성이 있을 수 있습니다. 언제든지 HTML에 새 항목을 추가할 수 있습니다. 이벤트 위임을 사용하여 HTML을 "확장"하고 새로운 동작을 설명하는 속성을 추가했습니다.이벤트 위임의 장점
기억해야 할 중요한 사항
이벤트 위임을 구현하기 전에 메모해야 할 몇 가지 사항이 있습니다.
stopPropagation()
를 사용하는 경우 이벤트가 버블링되지 않고 이벤트 위임이 작동하지 않습니다. 마무리!!
시간 내 주셔서 감사합니다!! 함께 배우고 성장하기 위해 연결합시다.
Reference
이 문제에 관하여(Javascript의 이벤트 위임), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/anuradha9712/event-delegation-in-javascript-4411텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)