각 하위 요소에 별도의 리스너를 추가하는 대신 단일 이벤트 리스너를 상위 요소에 연결하는 것이 이벤트 위임이라는 기술입니다. 이는 이벤트(예: 클릭)가 DOM 트리에서 하위 항목에서 상위 항목으로 이동하는 이벤트 버블링 때문에 작동합니다. 상위 수준에서 이벤트를 처리하면 특히 많은 하위 요소나 동적으로 추가되는 요소를 처리할 때 메모리를 절약하고 성능을 향상시킬 수 있습니다.
하위 요소에서 이벤트(예: 클릭)가 실행되면 여기서 멈추지 않습니다. 이벤트는 상위 항목으로 버블링되고, 문서 루트에 도달할 때까지 DOM 트리 위로 올라갑니다. 이벤트 위임은 모든 대상 하위 요소의 공통 조상에 이벤트 리스너를 배치하여 이를 활용합니다. 이 상위 요소는 하위 요소에서 발생하는 이벤트를 수신하고 이벤트 유형이나 이벤트를 트리거한 특정 하위 요소와 같은 특정 조건에 따라 이벤트를 처리합니다.
버튼 목록이 있고 각 버튼에 대한 클릭 이벤트를 처리하고 싶다고 가정해 보겠습니다. 각 버튼에 클릭 이벤트 리스너를 추가하는 대신 해당 상위 요소에 단일 리스너를 추가할 수 있습니다.
<ul id="buttonList"> <li><button data-action="delete">Delete</button></li> <li><button data-action="edit">Edit</button></li> <li><button data-action="view">View</button></li> </ul>
이제 각 버튼에 클릭 이벤트 리스너를 추가하는 대신 단일 리스너를 상위
document.getElementById("buttonList").addEventListener("click", function(event) { if (event.target.tagName === "BUTTON") { const action = event.target.getAttribute("data-action"); if (action === "delete") { console.log("Deleting item..."); } else if (action === "edit") { console.log("Editing item..."); } else if (action === "view") { console.log("Viewing item..."); } } });
클릭 이벤트 리스너는
버튼 목록이 동적으로 생성된 경우(예: JavaScript를 통해 새 버튼 추가) 이벤트 리스너를 다시 연결할 필요 없이 이벤트 위임이 완벽하게 작동합니다.
const ul = document.getElementById("buttonList"); // Dynamically adding new buttons const newButton = document.createElement("li"); newButton.innerHTML = '<button data-action="share">Share</button>'; ul.appendChild(newButton); // The same event listener on the parent will handle the new button ul.addEventListener("click", function(event) { if (event.target.tagName === "BUTTON") { const action = event.target.getAttribute("data-action"); console.log(action + " button clicked."); } });
이벤트 버블링: 이벤트 위임은 하위 요소에서 트리거된 이벤트가 상위 요소까지 전파되는 이벤트 버블링 때문에 작동합니다.
동적 콘텐츠에 효율적: 이벤트 리스너를 상위 항목에 연결하므로 나중에 DOM에 추가되는 요소에 대해 작동합니다.
성능: 특히 하위 요소 수가 많은 경우 여러 이벤트 리스너를 연결하고 관리하는 오버헤드를 줄입니다.
이벤트 위임은 특히 많은 요소나 동적 콘텐츠를 처리할 때 효율적인 DOM 이벤트 처리를 위한 필수 기술입니다.
위 내용은 당신처럼 JavaScript로 이벤트 위임 배우기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!