이벤트 리스너에는 비용이 많이 들어감
이벤트 위임을 통해 비용을 최소화 할 수 있음
각 버튼에 이벤트 리스너를 추가하여 클릭 시 alert를 띄움 : 비효율 / 고비용
기존의 이벤트 리스너를 반복문으로 처리함 : 고비용
eventListener
를 요소가 아닌 부모(menu
)에 받고
css에서 event를 받지 않을 요소에pointer-events: none;
를 추가함🚨 비용면에서는 효율적일 수 있으나,
요소 내부에 다른 요소들에게click Event
를 부여해야할 경우 복잡해질 수 있음.
btn3
text를 클릭 시event.path
는 아래와 같음
[div, div.menu-btn, div.menu, div.container, body, html, document, Window]
따라서
e.path.find()
함수를 통해서className
중menu-btn
가 있는지를 확인함
있을 경우clickBtnHandler
를 호출함
🤔 "버튼마다 다른 이벤트를 발생시키기 위해서 어떻게 해야할까?"
html
.menu-btn
내에dataset
attribute를 추가
data-value = "value"
로 지정해놓은dataset
은
target.getAttribute("data-value")
혹은
target.dataset.value
로 가져올 수 있음
🤔 "
document.querySelector(".menu-btn")
로 처리를 하면 되지 않을까?"
.menu-btn
내부의img
나div
등을 클릭할 시,
className
은.menu-btn
이 아니게 됨.따라서 내부의 모든 요소의
className
을
menu-btn
로 통일할 것이 아니라면 이 방법은 권장되지 않음.
Photo by Keila Hötzel on Unsplash
protect-me