문제

나는 대답하려고 노력한다 이 질문 몇 분 전에이 예제를 직접 준비했습니다.

<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);">
도움이 되었습니까?

해결책

jQuery의 이벤트 모델로 인해 첫 번째 해제 시나리오가 작동하지 않습니다. jQuery는 모든 이벤트 처리기 기능을 통해 액세스 할 수있는 배열에 저장합니다. $("#foo").data('events'). 그만큼 unbind 함수는이 배열에서 주어진 기능 만 찾습니다. 그래서 당신은 만 할 수 있습니다 unbind() 추가 된 이벤트 처리기 bind()

다른 팁

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 마크 업의 매개 변수.

해당 속성을 제거하여 풀릴 수 있습니다.

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

나는 전에도 비슷한 문제를 해결했다. 내가 결론 내린 것은 당신이 당신이 묻은 방법 만 풀 수 있다는 것입니다. TrialMethod ()는 jQuery를 통해 삐걱 거리지 않았으므로 방법에 대해 Unbind를 호출하는 것은 작동하지 않습니다.

우연히 알아 내면 알려주십시오.

감사.

BIND, UNBIND 및 양식 제출 조치가 포함 된 버그가 있습니다.

당신이 그때 묶어 놓고 묶고 양식을 제출하고 싶다면, 당신은 사용할 수 없습니다. $(form).submit(), 하지만 $(form INPUT[type=submit]).click() !

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top