본문 바로가기
프론트엔드/Javascript

[Javascript] 이벤트 버블링 방지 stopImmediatePropagation

by jinwanseo 2021. 5. 25.
728x90

[자바스크립트 / Javascript] 이벤트 버블링 방지 stopImmediatePropagation

 

stopImmediatePropagation과 비슷한 역할을하는

stopPropagation이 있는데 이들은 비슷하면서도 다른 성격을 가지고 있다

 

stopPropagation 같은 경우에는

상위 관련 다른 모든 이벤트 버블링 차단 기능을 수행하고

 

stopImmediatePropagation 같은 경우에는

상위 및 현재 레벨에 걸려있는 관련 이벤트 모두 동작하지 않도록 중단하는 역할을 하는데

하단의 예제를 통해 자세히 알아보도록 하자

 

  기본 형태

//이벤트 상위 전파 중단
event.stopPropagation();

//이벤트 상위, 현재 레벨에 걸린 다른 이벤트 또한 동작 중단
event.stopImmediatePropatation();

 

  샘플 코드 : event.stopPropagation()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>stopPropagation VS stopImmediatePropagation</title>
    <style>
        body{
            margin : 0;
            padding : 0;
        }

        .container {
            display : flex;
            justify-content: center;
            align-items: center;
            background-color: lightsteelblue;
            width : 500px;
            height: 300px;
        }

        .item {
            position : relative;
            background-color: lightpink;
            width :400px;
            height: 150px;
        }

        .itemBtn {
            position : absolute;
            top : 55px;
            left : 160px;
            font-size : 20px;
            padding: 6px 15px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">
            <button class="itemBtn">Click!</button>
        </div>
    </div>
    <script>
        document.querySelector('.container').addEventListener('click',e=>{
            console.log(`컨테이너 클릭!`);
        }); 
        document.querySelector('.item').addEventListener('click',e=>{
            console.log(`아이템 클릭1!`);
        });
        document.querySelector('.itemBtn').addEventListener('click',e=>{
            //상단 이벤트 버블링 방지!!
            e.stopPropagation();
            console.log(`버튼 클릭1!`);
        }); 
        document.querySelector('.itemBtn').addEventListener('click',e=>{
            console.log(`버튼 클릭2!`);
        }); 
    </script>
</body>
</html>

  결과 출력

 

버튼 클릭1! 

버튼 클릭2! 

 

  샘플 코드 : stopImmediatePropatation()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>stopPropagation VS stopImmediatePropagation</title>
    <style>
        body{
            margin : 0;
            padding : 0;
        }

        .container {
            display : flex;
            justify-content: center;
            align-items: center;
            background-color: lightsteelblue;
            width : 500px;
            height: 300px;
        }

        .item {
            position : relative;
            background-color: lightpink;
            width :400px;
            height: 150px;
        }

        .itemBtn {
            position : absolute;
            top : 55px;
            left : 160px;
            font-size : 20px;
            padding: 6px 15px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">
            <button class="itemBtn">Click!</button>
        </div>
    </div>
    <script>
        document.querySelector('.container').addEventListener('click',e=>{
            console.log(`컨테이너 클릭! ${e.target}, ${e.currentTarget}`);
        }); 
        document.querySelector('.item').addEventListener('click',e=>{
            console.log(`아이템 클릭1! ${e.target}, ${e.currentTarget}`);
        });
        document.querySelector('.itemBtn').addEventListener('click',e=>{
            e.stopImmediatePropagation();
            console.log(`버튼 클릭1! ${e.target}, ${e.currentTarget}`);
        }); 
        document.querySelector('.itemBtn').addEventListener('click',e=>{
            console.log(`버튼 클릭2! ${e.target}, ${e.currentTarget}`);
        }); 
    </script>
</body>
</html>

 

  출력 결과 

 

버튼 클릭1!

728x90

댓글