복붙노트

[JQUERY] jQuery를에 이벤트 처리기를 제거하는 가장 좋은 방법은?

JQUERY

jQuery를에 이벤트 처리기를 제거하는 가장 좋은 방법은?

해결법


  1. 1.jQuery를 1.7 이후 이벤트 API가 업데이트되었습니다, .bind () /. () 때어 여전히 이전 버전과의 호환성을 위해 사용할 수 있지만 바람직한 방법은 () 함수를 온 / 오프) (의를 사용하고 있습니다. 아래는 지금 것

    jQuery를 1.7 이후 이벤트 API가 업데이트되었습니다, .bind () /. () 때어 여전히 이전 버전과의 호환성을 위해 사용할 수 있지만 바람직한 방법은 () 함수를 온 / 오프) (의를 사용하고 있습니다. 아래는 지금 것

    $('#myimage').click(function() { return false; }); // Adds another click event
    $('#myimage').off('click');
    $('#myimage').on('click.mynamespace', function() { /* Do stuff */ });
    $('#myimage').off('click.mynamespace');
    

    귀하의 예제 코드에서 당신은 단순히 이전을 무시하지, 이미지에 또 다른 클릭 이벤트를 추가 :

    $('#myimage').click(function() { return false; }); // Adds another click event
    

    두 클릭 이벤트는 다음 트리거됩니다.

    사람들이 말했듯이 모든 클릭 이벤트를 제거 할 때어 사용할 수 있습니다 :

    $('#myimage').unbind('click');
    

    단일 이벤트를 추가 한 다음 (추가되었을 수있는 다른 사람을 제거하지 않고)를 제거 할 경우에 당신은 이벤트 네임 스페이스 지정을 사용할 수 있습니다 :

    $('#myimage').bind('click.mynamespace', function() { /* Do stuff */ });
    

    그냥 이벤트를 제거합니다 :

    $('#myimage').unbind('click.mynamespace');
    

  2. 2.이 질문에 대답 한 경우에 사용할 수없는,하지만 당신은 또한 이벤트를 활성화 / 비활성화하는 라이브 () 메소드를 사용할 수 있습니다.

    이 질문에 대답 한 경우에 사용할 수없는,하지만 당신은 또한 이벤트를 활성화 / 비활성화하는 라이브 () 메소드를 사용할 수 있습니다.

    $('#myimage:not(.disabled)').live('click', myclickevent);
    
    $('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });
    

    이것이 코드로 일어날하면 #mydisablebutton 클릭하면, 그것은 #myimage 요소에 사용할 클래스를 추가하는 것입니다. 이것은 그래서 선택은 더 이상 요소를 일치하고 '장애인'클래스가 다시 .live () 선택이 유효하게 제거 될 때까지 이벤트가 시작되지 않습니다 만들 것입니다.

    이 클래스에뿐만 아니라 기반 스타일을 추가하여 다른 장점이 있습니다.


  3. 3.당신이 이벤트에 응답하려면 한 시간을 원하는 경우, 다음과 같은 구문은 정말 도움이되어야합니다 :

    당신이 이벤트에 응답하려면 한 시간을 원하는 경우, 다음과 같은 구문은 정말 도움이되어야합니다 :

     $('.myLink').bind('click', function() {
       //do some things
    
       $(this).unbind('click', arguments.callee); //unbind *just this handler*
     });
    

    arguments.callee를 사용하여, 우리는 하나의 특정 익명의 기능 핸들러가 제거되었는지 확인하고, 따라서, 특정 이벤트에 대한 하나의 시간 핸들러를 가질 수 있습니다. 이 다른 사람에게 도움이되기를 바랍니다.


  4. 4.이는 바인더 해제 기능을 사용하여 수행 할 수 있습니다.

    이는 바인더 해제 기능을 사용하여 수행 할 수 있습니다.

    $('#myimage').unbind('click');
    

    당신은 JQuery와 동일한 객체 및 이벤트에 여러 이벤트 처리기를 추가 할 수 있습니다. 새로운 하나를 추가하는이 방법은 기존의 것들을 대체하지 않습니다.

    그러한 경우 네임 스페이스와 같은 이벤트 핸들러를 변경하기위한 몇 가지 전략이있다. 온라인 문서에서 이것에 대해 일부 페이지가 있습니다.

    (의 내가 바인딩을 해제 배운 방법 있음)이 질문에 봐. 답변에서 이러한 전략의 유용한 설명이있다.

    어떻게 JQuery와 바운드 가져가 콜백 함수를 읽기


  5. 5.어쩌면 때어 방법은 당신을 위해 작동합니다

    어쩌면 때어 방법은 당신을 위해 작동합니다

    $("#myimage").unbind("click");
    

  6. 6.나는 소품과 ATTR를 사용하여 널 (null)에 이벤트를 설정했다. 나는 둘 중 하나와 함께 할 수 없었다. 또한 작업에 .unbind 가져올 수 없습니다. 나는 TD 요소에서 일하고 있습니다.

    나는 소품과 ATTR를 사용하여 널 (null)에 이벤트를 설정했다. 나는 둘 중 하나와 함께 할 수 없었다. 또한 작업에 .unbind 가져올 수 없습니다. 나는 TD 요소에서 일하고 있습니다.

    .prop("onclick", null).attr("onclick", null)
    

  7. 7.이벤트가이 방식을 부착하고, 경우 대상은 무소속이 될 것입니다 :

    이벤트가이 방식을 부착하고, 경우 대상은 무소속이 될 것입니다 :

    $('#container').on('click','span',function(eo){
        alert(1);
    
        $(this).off(); //seams easy, but does not work
    
        $('#container').off('click','span'); //clears click event for every span
    
        $(this).on("click",function(){return false;}); //this works.
    
    });​
    

  8. 8.당신은 인라인 마크 업으로의 onclick 핸들러를 추가 할 수있다 :

    당신은 인라인 마크 업으로의 onclick 핸들러를 추가 할 수있다 :

    <input id="addreport" type="button" value="Add New Report" onclick="openAdd()" />
    

    그렇다면, JQuery와 .OFF () 또는 .unbind () 작동하지 않습니다. 당신은뿐만 아니라 JQuery와 원래 이벤트 처리기를 추가해야합니다 :

    $("#addreport").on("click", "", function (e) {
       openAdd();
    });
    

    그런 다음 JQuery와 이벤트 핸들러에 대한 참조를 가지고 그것을 제거 할 수 있습니다 :

    $("#addreport").off("click")
    

    VoidKing 위의 의견에 조금 더 비스듬하게 이것을 언급.


  9. 9.2014 년 업데이트

    2014 년 업데이트

    jQuery를 최신 버전을 사용하여, 당신은 지금 단순히 $ ( "#foo") .OFF ( ".myNamespace")을 수행하여 네임 스페이스에 모든 이벤트를 바인딩을 해제 할 수있어,


  10. 10.인라인 온 클릭 이벤트를 제거하는 가장 좋은 방법은 $ (요소) .prop ( '온 클릭', NULL)입니다;

    인라인 온 클릭 이벤트를 제거하는 가장 좋은 방법은 $ (요소) .prop ( '온 클릭', NULL)입니다;


  11. 11.ALL의 이벤트 핸들러를 제거하려면이 나를 위해 일 것입니다 :

    ALL의 이벤트 핸들러를 제거하려면이 나를 위해 일 것입니다 :

    모든 이벤트 핸들러는 요소와 자식 노드에 연결된 모든 이벤트 핸들러없이 일반 HTML 구조를 가지고 의미 제거합니다. 이렇게하려면 jQuery의 클론 () 도움이되었다.

    var original, clone;
    // element with id my-div and its child nodes have some event-handlers
    original = $('#my-div');
    clone = original.clone();
    //
    original.replaceWith(clone);
    

    이와 함께, 우리는에 아무런 이벤트 핸들러 원래의 장소에 복제해야합니다.

    행운을 빕니다...


  12. 12.정보 주셔서 감사합니다. 매우 도움이 난 다른 사용자가 편집 모드에있는 동안 페이지의 상호 작용을 잠금을 위해 그것을 사용했다. 나는 ajaxComplete과 함께 그것을 사용. 같은 동작하지만 다소 유사하지 necesarily.

    정보 주셔서 감사합니다. 매우 도움이 난 다른 사용자가 편집 모드에있는 동안 페이지의 상호 작용을 잠금을 위해 그것을 사용했다. 나는 ajaxComplete과 함께 그것을 사용. 같은 동작하지만 다소 유사하지 necesarily.

    function userPageLock(){
        $("body").bind("ajaxComplete.lockpage", function(){
            $("body").unbind("ajaxComplete.lockpage");
            executePageLock();      
        });
    };  
    
    function executePageLock(){
        //do something
    }
    

  13. 13.케이스 CSTE 연구진 () 메소드 이전 다음 예와 같은 특정 선택과 사용 하였다 :

    케이스 CSTE 연구진 () 메소드 이전 다음 예와 같은 특정 선택과 사용 하였다 :

    $('body').on('click', '.dynamicTarget', function () {
        // Code goes here
    });
    

    두 바인딩을 해제 ()과 .OFF () 메소드는 작업을하지 않을 수 있습니다.

    그러나 .undelegate () 메서드는 완전히 현재 셀렉터에 일치하는 모든 요소에 대한 이벤트에서 핸들러를 제거하는 데 사용할 수 있습니다 :

    $("body").undelegate(".dynamicTarget", "click")
    

  14. 14.당신이 동적으로 생성 된 요소에 리스너를 추가 CSTE 연구진은 $ (문서) ()를 사용하는 경우 다음 당신은 제거하려면 다음을 사용 할 수 있습니다 :

    당신이 동적으로 생성 된 요소에 리스너를 추가 CSTE 연구진은 $ (문서) ()를 사용하는 경우 다음 당신은 제거하려면 다음을 사용 할 수 있습니다 :

    // add the listener
    $(document).on('click','.element',function(){
        // stuff
    });
    
    // remove the listener
    $(document).off("click", ".element");
    
    

  15. 15.이것은 또한 좋은 .Simple 및 easy.see http://jsfiddle.net/uZc8w/570/ 작동

    이것은 또한 좋은 .Simple 및 easy.see http://jsfiddle.net/uZc8w/570/ 작동

    $('#myimage').removeAttr("click");
    

  16. 16.당신이 HTML을 통해 onclick을 설정하면 당신은 removeAttr ($ (이) .removeAttr ( '온 클릭')) 필요

    당신이 HTML을 통해 onclick을 설정하면 당신은 removeAttr ($ (이) .removeAttr ( '온 클릭')) 필요

    당신은 (내 위의 예에서 첫 번째 클릭 후 같이) 다음 ((이) .unbind ( '클릭') $) 바인딩을 해제 할 필요가 JQuery와 통해 그것을 설정하는 경우


  17. 17.나는이 말에 온다 알고 있지만 이유는되지 이벤트를 제거하기 위해 일반 JS를 사용합니까?

    나는이 말에 온다 알고 있지만 이유는되지 이벤트를 제거하기 위해 일반 JS를 사용합니까?

    var myElement = document.getElementById("your_ID");
    myElement.onclick = null;
    

    또는, 당신은 이벤트 핸들러로 명명 된 기능을 사용하는 경우 :

    function eh(event){...}
    var myElement = document.getElementById("your_ID");
    myElement.addEventListener("click",eh); // add event handler
    myElement.removeEventListener("click",eh); //remove it
    

  18. 18.나는 () 요소가 실행 시간에 생성 된 문서에와 클릭 이벤트를 추가했기 때문에 모든 기술 접근법은 나를 위해 일을하지 않았다 :

    나는 () 요소가 실행 시간에 생성 된 문서에와 클릭 이벤트를 추가했기 때문에 모든 기술 접근법은 나를 위해 일을하지 않았다 :

    $(document).on("click", ".button", function() {
        doSomething();
    });
    

    내 해결 방법 :

    난 그냥 같은 CSS 스타일을 한 버튼에 다른 클래스를 할당 ".button"클래스 바인딩을 해제하지 수 있기 때문에. 라이브 / 온 - 이벤트 핸들러 클릭을 마지막으로 무시 그렇게함으로써 :

    // prevent another click on the button by assigning another class
    $(".button").attr("class","buttonOff");
    

    희망이 도움이.


  19. 19.내 아래 코드는 모든 설명 바랍니다. HTML :

    내 아래 코드는 모든 설명 바랍니다. HTML :

    (함수 ($) { $ ( "#은 btn_add"). (함수를 "클릭"에 () { $ ( "#의 btn_click") (added_handler "클릭")에.; 경고 ( "버튼 하나에 새로운 핸들러 추가"); }); $ ( "#의 btn_remove"). (함수를 "클릭"에 () { $ ( "#의 btn_click") 해제 ( "클릭", added_handler).; 경고 ( "버튼 1을 제거하여 새로운 핸들러"); }); fixed_handler 함수 () { 경고 ( "고정 핸들러"); } added_handler 함수 () { 경고 ( "새로운 핸들러"); } $ ( "#의 btn_click") (fixed_handler "클릭")에.; $ ( "#은 btn_fixed")에 (fixed_handler "을 클릭합니다."); }) (jQuery를); <스크립트 SRC = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <버튼 ID = "btn_click"> 버튼 1 처리기 추가 <버튼 ID는 = "btn_add"> <버튼 ID = "btn_remove"> 핸들러를 삭제 <버튼 ID = "btn_fixed"> 고정 처리기


  20. 20.그냥 간단하게 버튼에서 해당 제거 :

    그냥 간단하게 버튼에서 해당 제거 :

    $('.classname').click(function(){
    $( ".classname" ).remove();
    });
    
  21. from https://stackoverflow.com/questions/209029/best-way-to-remove-an-event-handler-in-jquery by cc-by-sa and MIT license