>웹 프론트엔드 >JS 튜토리얼 >당신처럼 JavaScript로 이벤트 위임 배우기

당신처럼 JavaScript로 이벤트 위임 배우기

DDD
DDD원래의
2024-09-23 18:16:19245검색

Learn Event Delegation in JavaScript like you

각 하위 요소에 별도의 리스너를 추가하는 대신 단일 이벤트 리스너를 상위 요소에 연결하는 것이 이벤트 위임이라는 기술입니다. 이는 이벤트(예: 클릭)가 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...");
        }
      }
    });
    

    클릭 이벤트 리스너는

      요소(부모). 이벤트 핸들러 내에서 event.target.tagName === "BUTTON"을 사용하여 클릭한 요소가 버튼인지 확인합니다. 이렇게 하면 버튼 클릭에만 응답하게 됩니다. 취할 조치(삭제, 편집 또는 보기)를 결정하기 위해 data-action 속성을 사용합니다. 이 접근 방식은 특히 버튼이 많거나 새 버튼을 동적으로 추가하는 경우 더욱 효율적이고 확장 가능합니다.

      동적 요소를 사용한 또 다른 예

      버튼 목록이 동적으로 생성된 경우(예: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.