[jquery] jQuery에서 이벤트 핸들러를 제거하는 가장 좋은 방법은 무엇입니까?

있습니다 input type="image". 이것은 Microsoft Excel의 셀 노트처럼 작동합니다. 누군가 가이 텍스트 상자에 숫자를 입력하면에 input-image대한 이벤트 핸들러를 설정합니다 input-image. 그런 다음 사용자가를 클릭 image하면 데이터에 메모를 추가 할 수있는 팝업이 나타납니다.

내 문제는 사용자가 텍스트 상자에 0을 입력하면 input-image의 이벤트 핸들러 를 비활성화해야한다는 것 입니다. 나는 다음을 시도했지만 아무 소용이 없다.

$('#myimage').click(function { return false; });



답변

jQuery ≥ 1.7

jQuery를 이후 이벤트 API가 업데이트 1.7로, .bind()/ .unbind()여전히 이전 버전과의 호환성을 위해 사용할 수 있지만 선호하는 방법은을 사용 ) (에 / () 오프 기능. 아래는 이제

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

jQuery <1.7

예제 코드에서는 이전 클릭을 재정의하지 않고 이미지에 다른 클릭 이벤트를 추가하기 만하면됩니다.

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

그런 다음 두 클릭 이벤트가 모두 시작됩니다.

사람들이 말했듯이 unbind를 사용하여 모든 클릭 이벤트를 제거 할 수 있습니다.

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

단일 이벤트를 추가 한 다음 추가했을 수있는 다른 이벤트를 제거하지 않고 이벤트를 제거하려는 경우 이벤트 이름 간격을 사용할 수 있습니다.

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

이벤트 만 제거하려면 :

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


답변

이 질문에 대한 답변이 제공되지 않았지만 live () 메서드를 사용하여 이벤트를 활성화 / 비활성화 할 수도 있습니다 .

$('#myimage:not(.disabled)').live('click', myclickevent);

$('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });

이 코드를 사용하면 #mydisablebutton을 클릭하면 #myimage 요소에 비활성화 된 클래스가 추가됩니다. 이렇게하면 선택기가 더 이상 요소와 일치하지 않고 ‘disabled’클래스가 제거되어 .live () 선택기가 다시 유효해질 때까지 이벤트가 시작되지 않습니다.

이것은 해당 클래스를 기반으로 스타일을 추가함으로써 다른 이점도 있습니다.


답변

이벤트 에 한 번만 응답 하려면 다음 구문이 실제로 유용합니다.

 $('.myLink').bind('click', function() {
   //do some things

   $(this).unbind('click', arguments.callee); //unbind *just this handler*
 });

arguments.callee를 사용 하면 하나의 특정 익명 함수 처리기가 제거되어 주어진 이벤트에 대해 단일 시간 처리기가 있습니다. 이것이 다른 사람들을 돕기를 바랍니다.


답변

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

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

jquery에서 동일한 객체 및 이벤트에 여러 이벤트 핸들러를 추가 할 수 있습니다. 이것은 새로운 것을 추가해도 기존의 것을 대체하지 않는다는 것을 의미합니다.

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

이 질문을보십시오 (바인드 해제 방법을 배웠습니다). 답변에 이러한 전략에 대한 유용한 설명이 있습니다.

jquery에서 바운드 호버 콜백 함수를 읽는 방법


답변

아마 바인딩 해제 방법이 당신을 위해 작동합니다

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


답변

prop과 attr을 사용하여 이벤트를 null로 설정해야했습니다. 나는 하나 또는 다른 것으로 그것을 할 수 없었다. 또한 .unbind를 작동시킬 수 없었습니다. TD 요소를 작업 중입니다.

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


답변

이 방법으로 이벤트가 첨부 되고 대상이 연결 해제되는 경우 :

$('#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.

});​