본문 바로가기
Front/jQuery

jQuery - 이벤트 객체 메소드

by Hyeon_ 2021. 12. 15.

이벤트 객체 메소드

  • preventDefault() : 현재 이벤트의 기본 동작 중지
  • stopPropagation() : 상위 element로 이벤트가 전파되는 것 중지
  • stopImmediatelyPropagation() : 현재 이벤트의 다른 리스너 중지 및 상위로 전파되는 것 중지

(1) preventDefault()

return false

  • jQuery에서는
    • preventDefault() + stopPropagation()
  • JavaScript 에서는
    • preventDefault()

HTML 요소의 기본 동작

  • <a> 태그 클릭 시

    • href 속성에 지정된 url로 이동
  • document에서 오른쪽 마우스 클릭 시

    • contextmenu (팝업메뉴) 출력
preventDefault.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript</title>
    <script src="jquery-3.6.0.min.js"></script>
    <script type="text/javascript"> 
        $(document).ready(function(){
            /* <a> 태그의 기본 동작(url로 이동) 중지 */
            $('#link').on('click', function(e){
                e.preventDefault();
                alert("일시적 이동 중지");
            });

            // 문서 상에서 오른쪽 마우스 클릭했을 때 기본동작 중지
            document.oncontextmenu = function(e){
                e.preventDefault();
                alert("오른쪽 마우스 클릭 금지");
                // return false; 해도 됨
            }
        });

    </script>
</head>
<body>
    <!-- <a> 태그는 클릭하면 href 속성에 지정된 url로 이동하는 기본 동작 수행 -->
    <a href="naver.com" id="link">네이버로 이동</a>
</body>
</html>

이벤트 전파(Propagation)

  • 자식 요소에서 발생한 이벤트가 부모 요소에까지 전파되는 것

  • 이벤트 버블링

  • <div id="parent"><div id="child">자식</div></div>

  • 자식 <div>를 클릭했는데, 부모 <div> 클릭 이벤트 발생

  • stopPropagation() : 상위 요소로 이벤트가 전파되는 것 중지

stopPropagation.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript</title>
    <style>
        #parent {border: solid 1px blue;}
        #child {border: solid 1px red; width: 20%;}
    </style>
    <script src="js/jquery-3.6.0.min.js"></script>
    <script type="text/javascript"> 
        $(document).ready(function(){
            // child 영역 제외한 paretn 클릭 -> parent만 발생
            $('#parent').on('click', function(){
                alert("paretn");
            });

            // 현재 child 클릭 -> child/parent 2개 이벤트 발생
            $('#child').on('click', function(e){
                e.stopPropagation();
                alert("child");
            })
        });

    </script>
</head>
<body>
    <div id="parent">
        <div id="child">클릭</div>
    </div>
</body>
</html>
  • stopImmediatelyPropagation() : 현재 이벤트의 다른 리스너 중지 및 상위로 전파되는 것 중지
  • 하나의 버튼에 3개의 이벤트 핸들러 작성
    • 3개의 이벤트 리스너 수행
stopImmediatelyPropagation.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript</title>
    <script src="js/jquery-3.6.0.min.js"></script>
    <script type="text/javascript"> 
        $(document).ready(function(){
            // 현재 3개의 이벤트 리스너 수행
            $('#btn').on('click', function(e){
                // click1 이벤트만 수행되게
                // 다른 리스너 중지 및 상위로 전파되는 것 중지
                e.stopImmediatePropagation();
                alert('click1');
            });

            $('#btn').on('click', function(){
                alert('click2');
            });

            $('#btn').on('click', function(){
                alert('click3');
            });
        });
    </script>
</head>
<body>
    <button id="btn">클릭</button>
</body>
</html>