이벤트 버블링

nn·2022년 5월 20일
0

이벤트 버블링

자식요소에서 발생된 이벤트는 부모를 통해 전파가 된다.
즉 하위 요소에서 상위 요소로 올라가게 된다.

<body>
    <div id ="box">
        <ul id = "list">
            <li id ="color">
                red
            </li>
        </ul>
    </div>
</body>

body -> div -> ul -> li 태그들이 부모와 자식 관계를 가지고 있다.

다음과 같이 각 요소가 클릭이 되었을 때 콘솔 로그를 출력해보자.

<script>
    const div = document.querySelector('div');
    const ul = document.querySelector('ul');
    const li = document.querySelector('li');
    document.body.addEventListener('click', () => {
        console.log("1 body")
    });
    div.addEventListener('click', () => {
        console.log("2 div")
    });
    ul.addEventListener('click', () => {
        console.log("3 ul")
    });
    li.addEventListener('click', () => {
        console.log("4 li")
    });
</script>

li을 클릭했을 땐 콘솔에 어떤 값이 출력될까?


위 그림에서 빨간 박스는 li이 가진 스타일이다.
그럼 빨간색 박스를 클릭했을 때, 콘솔에 찍힌 값을 보자.

li만 찍혔는가?
li의 부모 태그까지 모두 찍힌 것을 확인 할 수있다.

동일하게 ul을 클릭한다면 다음과 같이 li를 제외한 body태그까지의 부모 태그가 출력된다.

이 과정을 이벤트 버블링이라고 한다.
그림으로 표현하자면 아래와 같다.

대부분의 이벤트는 위와 같이 버블링이 작동된다.
하지만 다음의 이벤트는 버블링이 발생하지 않는다.

  • focus
  • blur
  • mouseenter
  • mouseleave

위 이벤트를 버블링으로 작동하게 하기 위해서는 아래와 같이 변경해 사용하면된다.

이들은 같은 동작을 수행하지만 버블링의 작동 유무에 차이점이 있으므로 적절하게 사용하도록 하자.

  • focus => focusin
  • blur => focusout
  • mouseenter => mouseover
  • mouseleave => mouseout
profile
내가 될 거라고 했잖아

0개의 댓글

관련 채용 정보