반응형
은세고화
뚜렷한 기억보단 흐릿한 잉크를
은세고화
전체 방문자
오늘
어제
  • 분류 전체보기 (96)
    • TDD (2)
      • 학점 산출 프로그램 (2)
    • IT (44)
      • 부스트코스 (18)
      • CS50 (3)
      • 도서추천 알고리즘 (2)
      • 스터디 일정 (3)
      • 스프링 (3)
      • 프로젝트 개발 중 발생한 에러 (8)
      • 웹개발 (4)
      • DB (3)
    • 독서 후기 (12)
      • 도서 (12)
    • e북 (3)
    • 알고리즘 (26)
    • 프로젝트 (6)
      • 향수 (6)
    • 회고 (1)

블로그 메뉴

  • 홈

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
은세고화

뚜렷한 기억보단 흐릿한 잉크를

IT/부스트코스

부스트코스 웹앱개발 -3 Event delegation

2020. 4. 23. 18:52
반응형

list가 여러개인 ui에 각각 비슷한 이벤트를 걸어서 처리하는법

1.기본적인방법

<html>
    <body>
<ul>
    <li>
      <img src="https://images-na.,,,,,/513hgbYgL._AC_SY400_.jpg" class="product-image" >    </li>
    <li>
      <img src="https://images-n,,,,,/41HoczB2L._AC_SY400_.jpg" class="product-image" >    </li>
    <li>
      <img src="https://images-na.,,,,51AEisFiL._AC_SY400_.jpg" class="product-image" >  </li>
   <li>
      <img src="https://images-na,,,,/51JVpV3ZL._AC_SY400_.jpg" class="product-image" >
   </li>
  </ul>
  <section class="log"></section>
  <script src="2.eventdelegation.js"></script>
</body>
  </html>

클릭했을 때 이미지 src를 찍어보자

var log = document.querySelector(".log");
var lists = document.querySelectorAll("ul > li");

for(var i=0, len=lists.length; i < len; i++){
    //에러가걸릴경우 debugger;로 멈추고 브라우저로 점검함
    lists[i].addEventListener("click", function(evt){
   //이미지의 주소값찍기
   log.innerHTML = "clicked" + evt.currentTarget.firstElementChild.src;
    })
}

2.효율적인 방법

이벤트 버블링을 이용한 방법이다.

이벤트 버블링이란 ul > li > img 가 있다면

ul에다 이벤트를 걸어도 img까지 실행되는 것이다.

event.currentTarget을 한 후 img를 누르면 ul이 나오고

event.target을 하면 클릭한 img가 나온다.

즉 큰곳에 이벤트를 걸어두면 작은곳은 알아서 걸린다는 것이다.

이를 활용해 db에 추가되는 li들을 ul에 이벤트리스너를 등록해버리면

나머지는 알아서 실행된다.

버블링은 안에서 밖으로 실행되고 캡처는 반대로 밖에서 안으로 실행되는데

캡처는 잘 안쓰인다. 코드로 살펴보면

var log = document.querySelector(".log");
var ul = document.querySelector("ul");

ul.addEventListener("click", function(evt){
    if(evt.target.tagName == "IMG"){
        log.innerHTML = "clicked" + evt.target.src;
        
    } else if(evt.target.tagName == "li"){
        log.innerHTML = "clicked" + evt.target.firstElementChild.src;
    }
})

img부분 약간 옆 부분이 li로 표시돼있어서 그부분도 포함시키려고 else if 를 사용했다.

반응형
저작자표시 (새창열림)

'IT > 부스트코스' 카테고리의 다른 글

부스트코스 웹앱개발 -6 스프링JDBC  (1) 2020.04.30
부스트코스 웹앱개발 -5 스프링  (0) 2020.04.28
부스트코스 웹앱개발 -2 AJAX  (0) 2020.04.22
부스트코스 웹 앱 개발-1: 자바스크립트 배열 및 오브젝트  (1) 2020.04.01
DAO와 DTO사용 이유/getter setter  (3) 2020.02.29
    'IT/부스트코스' 카테고리의 다른 글
    • 부스트코스 웹앱개발 -6 스프링JDBC
    • 부스트코스 웹앱개발 -5 스프링
    • 부스트코스 웹앱개발 -2 AJAX
    • 부스트코스 웹 앱 개발-1: 자바스크립트 배열 및 오브젝트
    은세고화
    은세고화

    티스토리툴바