프론트엔드/자바스크립트

이벤트 위임

테오구 2022. 5. 24. 15:36
728x90

어떠한 nav바를 클릭했을 시 다른 상태를 보여줘야 한다고 생각합니다.

어떻게 할 수 있을까요? 일일히 버튼이 에스프레소 버튼, 프라푸치노 버튼이 클릭될 때마다 이벤트를 줘야할까요?

$('americano').addEventListener('click', e => {
    ...
  })
$('frappuccino').addEventListener('click', e => {
    ...
  })
$('blended').addEventListener('click', e => {
    ...
  })

이렇게 한다면 굉장히 비 효율적일 것입니다. 이럴 때 이벤트 위임을 이용할 수 있습니다.

이벤트 위임에는 이벤트 버블링과 캡쳐링이 있습니다.

 

 

 

 

버블링

한 요소에 이벤트가 발생하면, 이 요소에 할당된 핸들러가 동작하고, 이어서 부모 요소의 핸들러가 동작합니다. 가장 최상단의 조상 요소를 만날 때까지 이 과정이 반복되면서 요소 각각에 할당된 핸들러가 동작합니다.

캡쳐링

캡처링은 버블링과는 반대로 최상위 태그에서 해당 태그를 찾아 내려갑니다.

$('nav').addEventListener('click', e => {
    const isCategoryButton = e.target.classList.contains('cafe-category-name')
    if (isCategoryButton) {
      const categoryName = e.target.dataset.categoryName
      this.currentCategory = categoryName
      $('#category-title').innerText = `${e.target.innerText} 메뉴 관리`
      render()
    }
  })

이렇게 부모에서 이벤트가 발생했을 때 자식의 category이름을 가져와서 innerText를 교체해주면

훨씬 더 간결하게 코드를 짤 수 있습니다.

728x90

'프론트엔드 > 자바스크립트' 카테고리의 다른 글

데이터 타입  (0) 2022.04.28
프로토타입 (Prototype)  (0) 2022.04.24
이터레이션(이터러블)  (0) 2022.04.20
제너레이터  (0) 2022.04.20
이터러블  (0) 2022.04.04