[JQUERY] jQuery를에 이벤트 처리기를 제거하는 가장 좋은 방법은?
JQUERYjQuery를에 이벤트 처리기를 제거하는 가장 좋은 방법은?
해결법
-
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.이 질문에 대답 한 경우에 사용할 수없는,하지만 당신은 또한 이벤트를 활성화 / 비활성화하는 라이브 () 메소드를 사용할 수 있습니다.
이 질문에 대답 한 경우에 사용할 수없는,하지만 당신은 또한 이벤트를 활성화 / 비활성화하는 라이브 () 메소드를 사용할 수 있습니다.
$('#myimage:not(.disabled)').live('click', myclickevent); $('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });
이것이 코드로 일어날하면 #mydisablebutton 클릭하면, 그것은 #myimage 요소에 사용할 클래스를 추가하는 것입니다. 이것은 그래서 선택은 더 이상 요소를 일치하고 '장애인'클래스가 다시 .live () 선택이 유효하게 제거 될 때까지 이벤트가 시작되지 않습니다 만들 것입니다.
이 클래스에뿐만 아니라 기반 스타일을 추가하여 다른 장점이 있습니다.
-
3.당신이 이벤트에 응답하려면 한 시간을 원하는 경우, 다음과 같은 구문은 정말 도움이되어야합니다 :
당신이 이벤트에 응답하려면 한 시간을 원하는 경우, 다음과 같은 구문은 정말 도움이되어야합니다 :
$('.myLink').bind('click', function() { //do some things $(this).unbind('click', arguments.callee); //unbind *just this handler* });
arguments.callee를 사용하여, 우리는 하나의 특정 익명의 기능 핸들러가 제거되었는지 확인하고, 따라서, 특정 이벤트에 대한 하나의 시간 핸들러를 가질 수 있습니다. 이 다른 사람에게 도움이되기를 바랍니다.
-
4.이는 바인더 해제 기능을 사용하여 수행 할 수 있습니다.
이는 바인더 해제 기능을 사용하여 수행 할 수 있습니다.
$('#myimage').unbind('click');
당신은 JQuery와 동일한 객체 및 이벤트에 여러 이벤트 처리기를 추가 할 수 있습니다. 새로운 하나를 추가하는이 방법은 기존의 것들을 대체하지 않습니다.
그러한 경우 네임 스페이스와 같은 이벤트 핸들러를 변경하기위한 몇 가지 전략이있다. 온라인 문서에서 이것에 대해 일부 페이지가 있습니다.
(의 내가 바인딩을 해제 배운 방법 있음)이 질문에 봐. 답변에서 이러한 전략의 유용한 설명이있다.
어떻게 JQuery와 바운드 가져가 콜백 함수를 읽기
-
5.어쩌면 때어 방법은 당신을 위해 작동합니다
어쩌면 때어 방법은 당신을 위해 작동합니다
$("#myimage").unbind("click");
-
6.나는 소품과 ATTR를 사용하여 널 (null)에 이벤트를 설정했다. 나는 둘 중 하나와 함께 할 수 없었다. 또한 작업에 .unbind 가져올 수 없습니다. 나는 TD 요소에서 일하고 있습니다.
나는 소품과 ATTR를 사용하여 널 (null)에 이벤트를 설정했다. 나는 둘 중 하나와 함께 할 수 없었다. 또한 작업에 .unbind 가져올 수 없습니다. 나는 TD 요소에서 일하고 있습니다.
.prop("onclick", null).attr("onclick", null)
-
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.당신은 인라인 마크 업으로의 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.2014 년 업데이트
2014 년 업데이트
jQuery를 최신 버전을 사용하여, 당신은 지금 단순히 $ ( "#foo") .OFF ( ".myNamespace")을 수행하여 네임 스페이스에 모든 이벤트를 바인딩을 해제 할 수있어,
-
10.인라인 온 클릭 이벤트를 제거하는 가장 좋은 방법은 $ (요소) .prop ( '온 클릭', NULL)입니다;
인라인 온 클릭 이벤트를 제거하는 가장 좋은 방법은 $ (요소) .prop ( '온 클릭', NULL)입니다;
-
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.정보 주셔서 감사합니다. 매우 도움이 난 다른 사용자가 편집 모드에있는 동안 페이지의 상호 작용을 잠금을 위해 그것을 사용했다. 나는 ajaxComplete과 함께 그것을 사용. 같은 동작하지만 다소 유사하지 necesarily.
정보 주셔서 감사합니다. 매우 도움이 난 다른 사용자가 편집 모드에있는 동안 페이지의 상호 작용을 잠금을 위해 그것을 사용했다. 나는 ajaxComplete과 함께 그것을 사용. 같은 동작하지만 다소 유사하지 necesarily.
function userPageLock(){ $("body").bind("ajaxComplete.lockpage", function(){ $("body").unbind("ajaxComplete.lockpage"); executePageLock(); }); }; function executePageLock(){ //do something }
-
13.케이스 CSTE 연구진 () 메소드 이전 다음 예와 같은 특정 선택과 사용 하였다 :
케이스 CSTE 연구진 () 메소드 이전 다음 예와 같은 특정 선택과 사용 하였다 :
$('body').on('click', '.dynamicTarget', function () { // Code goes here });
두 바인딩을 해제 ()과 .OFF () 메소드는 작업을하지 않을 수 있습니다.
그러나 .undelegate () 메서드는 완전히 현재 셀렉터에 일치하는 모든 요소에 대한 이벤트에서 핸들러를 제거하는 데 사용할 수 있습니다 :
$("body").undelegate(".dynamicTarget", "click")
-
14.당신이 동적으로 생성 된 요소에 리스너를 추가 CSTE 연구진은 $ (문서) ()를 사용하는 경우 다음 당신은 제거하려면 다음을 사용 할 수 있습니다 :
당신이 동적으로 생성 된 요소에 리스너를 추가 CSTE 연구진은 $ (문서) ()를 사용하는 경우 다음 당신은 제거하려면 다음을 사용 할 수 있습니다 :
// add the listener $(document).on('click','.element',function(){ // stuff }); // remove the listener $(document).off("click", ".element");
-
15.이것은 또한 좋은 .Simple 및 easy.see http://jsfiddle.net/uZc8w/570/ 작동
이것은 또한 좋은 .Simple 및 easy.see http://jsfiddle.net/uZc8w/570/ 작동
$('#myimage').removeAttr("click");
-
16.당신이 HTML을 통해 onclick을 설정하면 당신은 removeAttr ($ (이) .removeAttr ( '온 클릭')) 필요
당신이 HTML을 통해 onclick을 설정하면 당신은 removeAttr ($ (이) .removeAttr ( '온 클릭')) 필요
당신은 (내 위의 예에서 첫 번째 클릭 후 같이) 다음 ((이) .unbind ( '클릭') $) 바인딩을 해제 할 필요가 JQuery와 통해 그것을 설정하는 경우
-
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.나는 () 요소가 실행 시간에 생성 된 문서에와 클릭 이벤트를 추가했기 때문에 모든 기술 접근법은 나를 위해 일을하지 않았다 :
나는 () 요소가 실행 시간에 생성 된 문서에와 클릭 이벤트를 추가했기 때문에 모든 기술 접근법은 나를 위해 일을하지 않았다 :
$(document).on("click", ".button", function() { doSomething(); });
내 해결 방법 :
난 그냥 같은 CSS 스타일을 한 버튼에 다른 클래스를 할당 ".button"클래스 바인딩을 해제하지 수 있기 때문에. 라이브 / 온 - 이벤트 핸들러 클릭을 마지막으로 무시 그렇게함으로써 :
// prevent another click on the button by assigning another class $(".button").attr("class","buttonOff");
희망이 도움이.
-
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"> script> <버튼 ID = "btn_click"> 버튼 1 버튼> 처리기 추가 버튼> <버튼 ID는 = "btn_add"> <버튼 ID = "btn_remove"> 핸들러를 삭제 버튼> <버튼 ID = "btn_fixed"> 고정 처리기 버튼>
-
20.그냥 간단하게 버튼에서 해당 제거 :
그냥 간단하게 버튼에서 해당 제거 :
$('.classname').click(function(){ $( ".classname" ).remove(); });
from https://stackoverflow.com/questions/209029/best-way-to-remove-an-event-handler-in-jquery by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 텍스트 영역에서 jQuery를 설정 커서 위치 (0) | 2020.09.23 |
---|---|
[JQUERY] 요소가 jQuery를에 숨겨져 있는지 어떻게 확인합니까? (0) | 2020.09.23 |
[JQUERY] jQuery를 사용하여 하이퍼 링크의 HREF를 변경하는 방법 (0) | 2020.09.23 |
[JQUERY] 선택과 AJAX 기반의 사이트에서 바로 컨트롤을 활성화 (0) | 2020.09.23 |
[JQUERY] 모든 JQuery와 이벤트는 $ (문서)에 결합해야 하는가? (0) | 2020.09.23 |