이벤트 제거 메서드 - bind() , off() , unbind() , undelegate()

imjingu·2023년 7월 26일
0

개발공부

목록 보기
228/481

이벤트 제거 메서드 : 이전에 등록된 이벤트를 제거
이벤트 등록 메서드에 따라 이벤트를 해제하는 방법도 달라짐

bind() : 이벤트 등록시 이전에 많이 사용하던 메서드, 제이쿼리 3점대 부터는 사용을 권장하지 않음

off() : on() 메서드로 등록한 이벤트를 제거
unbind() : bind() 메서드로 등록한 이벤트를 제거
undelegate() : delegate() 메서드로 등록한 이벤트를 제거

1) on() 이벤트 해제를 위한 off() 메서드
기본 이벤트 제거 방식
$("이벤트 대상 요소 선택").off("이벤트 종류");

라이브 이벤트 제거 방식
$(document | "이벤트 대상의 상위 요소 선택").off("이벤트 종류", "이벤트 대상 요소 선택");

2) bind() 이벤트 해제를 위한 unbind() 메서드
$("이벤트 대상 요소 선택").unbind("이벤트 종류");

3) delegate() 이벤트 해제를 위한 undelegate() 메서드
기본 이벤트 제거 방식
$("이벤트 대상 요소 선택").undelegate("이벤트 종류");

라이브 이벤트 제거 방식 (순서 주의)
$(document | "이벤트 대상의 상위 요소 선택").undelegate("이벤트 대상 요소 선택", "이벤트 종류");

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <title>Document</title>
    <script>
        /*
        
        */
        
        $(function() {
            // .btn_1 클래스를 가진 요소에 마우스를 올리면 HELLO 라는 경고창이 뜨게 on() 메서드 작성
            $('.btn_1').on('mouseover', function () {
                alert('HELLO!');
            });

            // .btn_2 클래스를 가진 요소에 마우스를 올리면 WELCOME 라는 경고창이 뜨게 on() 메서드를 라이브 이벤트 방식으로 작성
            $('#wrap').on('mouseover', '.btn_2', function() {
                alert('WELCOME!');
            });

            // btn_2 클래스를 가진 버튼을 wrap이라는 아이디를 가진 요소의 자식요소로 추가
            $('#wrap').append('<p><button class="btn_2">버튼2</button></p>');

            //이벤트 해제
            $('.del_1').on('click', function () {
                $('.btn_1').off('mouseover'); 
            })
            $('.del_2').on('click', function () {
                $('#wrap').off('mouseover', '.btn_2'); // 라이브 이벤트 해제 방식 
            })
        });
    
    </script>
    
</head>
<body>
    <div id="wrap">
        <p><button class="btn_1">버튼1</button></p>
    </div>
    <p>
        <button class="del_1">버튼1 이벤트 해지</button>
        <button class="del_2">버튼2 이벤트 해지</button>
    </p>
</body>
</html>

0개의 댓글