JavaScript

자바스크립트 이벤트(Event) 위임하기

ktko 2017. 5. 18. 19:14

자바스크립트 이벤트(Event) 위임하기


해당 Itemlist를 클릭했을 경우 해당 아이템에 대하여 이벤트를 구현할 때

<p id="demo"></p>

<ul id="itemList"> <li class="item">kyungtae</li> <li class="item">kokyungtae</li> <li class="item">ktko</li> <li class="item">ktko_0714</li> </ul> <p id="ktko"></p>



아래와 같이 Id에서 item class를 찾아 class를 가진 해당 li 태그에 이벤트를 추가한다.

아래 코드는 문제가 없지만 만약에 li태그가 많다면? 50개 100개 1000개가 된다면 li태그들이 DOM에 등록되어 비효율적인 코드가 된다.


<script>
  document.addEventListener("DOMContentLoaded", function() {
    var app = document.getElementById("itemList");
    var items = document.getElementsByClassName("item");
    
    for(let item of items) {
        item.addEventListener("click", function() {
            document.getElementById("ktko").innerHTML = item.innerHTML;
        });
    }
  });
</script>



item마다 이벤트 리스너를 생성하는 것 보다는 itemList를 DOM에 등록하여 이벤트 리스너가 사용자가 클릭한 아이템을 찾아 이벤트를 발생시키는 것이 제일 효율적이다.


<script>
    document.addEventListener("DOMContentLoaded", function() {
        var app = document.getElementById("itemList");
        app.addEventListener("click", function(event) {
            if(event.target.nodeName == "LI"){
                document.getElementById("ktko").innerHTML = event.target.innerHTML;
            }
        });
    });
</script>