2009-04-29 5 views
6

나는 몇 분 전에 this question 답변을 시도하고 자신을 위해이 예제 준비 :왜이 바인딩 해제가 작동하지 않습니까?

<script> 
    function trialMethod() 
    { 
    alert('On Submit Run!'); return true; 
    } 
    function trialMethod2() 
    { 
    alert('On Submit Run trialMethod2!'); return true; 
    } 
</script> 

<form id="aspnetForm" onsubmit="trialMethod();"> 
    <input type="submit"> 
</form> 

첫 바인딩 해제가 작동하지 않는 이유 :

<input type="button" id="btnTrial1" value="UNBIND 1" 
    onclick="$('#aspnetForm').unbind('submit', trialMethod);"> 

을하지만이 사람은 trialMethod2 방법에 대한 작동합니다 :

<input type="button" id="btnTrial2" value="UNBIND 2" 
    onclick="$('#aspnetForm').bind('submit', trialMethod2).unbind('submit', trialMethod2);"> 

답변

9

jQuery의 이벤트 모델 때문에 첫 번째 바인딩 해제 시나리오가 작동하지 않습니다. jQuery는 모든 이벤트 핸들러 함수를 $ ("# foo"). data ('events')를 통해 액세스 할 수있는 배열에 저장합니다. unbind 함수는이 배열에서 주어진 함수를 찾습니다. 그래서, 당신은 당신이 다음과 같은 방법으로 바인딩을 해제 할 수 있습니다

1

이전에 유사한 문제가 발생했습니다. 내가 결론을 내린 것은 바인딩 한 메서드 만 바인딩 해제 할 수 있다는 것입니다. trialmethod()는 jquery를 통해 바인드되지 않았기 때문에이 메서드에 바인딩 해제를 호출하면 작동하지 않습니다.

언제든지 알려주십시오.

감사합니다.

3

jQuery를 사용하는 경우 아무도 마크 업과 상호 작용 코드를 혼용해서는 안됩니다.

같은 페이지에 몇 가지 자바 스크립트를 추가

$(function() { 
    $('#aspnetForm').bind('submit',function() { 
     trialMethod(); 
    }); 
    $('#btnTrial2').bind('click',function() { 
     $('#aspnetForm').unbind('submit'); 
    }); 
    $('#btnTrial2').bind('click',function() { 
     $('#aspnetForm').bind('submit', trialMethod2).unbind('submit'); 
    }); 
}); 

을 지금, 그와 함께 길에서 ... 당신은 지금 될 것입니다 비록 모든 (지금 작업을해야 바인딩 해제하기 전에 #aspnetForm을 두 번 바인딩 두번째 버튼을 누를 때 완전히). 문제는 그 양식이 실제로 시작된 적이 결코 없다는 것이 었습니다. 마크 업에서 onsubmit 매개 변수의 바인딩을 해제 할 수 있습니다.

+0

아무도 마크 업과 상호 작용 코드를 섞어서는 안됩니다. – eyelidlessness

+0

사실, 절대로 결합해서는 안됩니다. 기간. * 특히 jQuery를 사용하는 경우 : D. – KyleFarris

3

바인드()로 추가 된() 이벤트 핸들러 바인딩을 해제 할 수 있습니다. 페이지를

$ ('# aspnetForm') removeAttr ('onsubmit');

1

는 바인딩 해제 조치를 제출 형성, 바인드 버그가 : 당신이 결합하면

다음 바인딩을 해제, 당신은, 당신이 $(form).submit(),하지만 $(form INPUT[type=submit]).click()을 사용할 수 없습니다 양식을 제출합니다!

관련 문제