이 풀린이 작동하지 않는 이유는 무엇입니까?
-
03-07-2019 - |
문제
나는 대답하려고 노력한다 이 질문 몇 분 전에이 예제를 직접 준비했습니다.
<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()
!