2012-10-30 3 views
0
나는이 양식을 가지고

onclick을 제출 형성

시나리오

:

<form action="EditShippingInfo.asp" method="POST" id="frmShippingInfo"> 
    <!-- stuff --> 
    <input type="image" id="EditShippingInfo" onclick="javascript:checkShippingInfo(this.form);" src="/img/btn_save.gif" /> 
</form> 

checkShippingInfo 기능은 일부 입력 유효성 검사 컨트롤을 실행합니다.

function checkShippingInfo(form){ 
     /* runs validation controls */ 

     var data = setDataForAjax; 
     $.ajax({ 
      type: 'GET', 
      url: '/include/checkAddresses.asp', 
      data: data, 
      async: false, 
      success: function (m) { 
       if (m == 0) { 
        /* I want to run form.submit only if m=0 */ 
        form.submit(); 
       } 
       else { 
        /* otherways I display a message */ 
        alert(m); 
        return false; 
       } 
      } 
     }); 
    } 

을하지만 형태는 경우에도 m = 0, 어쨌든을 트리거 제출 결국 그것은 AJAX를 통해 서버 측 컨트롤을 실행!.

질문 난 단지 특정 조건 하에서 form.submit을 트리거 할

. input type="image"은 어떤 경우에도 제출을 트리거합니까?

답변

3

사실

제출 입력에 onclick 이벤트는 항상 양식을 제출 트리거된다. 이 아닌 한 onclick 이벤트 핸들러는 FALSE을 명시 적으로 반환합니다.

이 후, 두 가지 중요한 세부 사항이 제 코드에 없습니다.

솔루션

  1. onclick 이벤트 핸들러의 return 키워드.

    onclick="javascript:return checkShippingInfo(this.form);"

  2. checkShippingInfo 함수의 값 return.

.

function checkShippingInfo(form) 
{ 
     /* do the validation control... */ 

     /* do the ajax call... */ 

     /* I prevent the form submit */ 
     return false; 
} 
+0

+1 : 지금은 결코 잊지 못할 것입니다; – leppie

+0

@Dan은 – Dan

+0

이지만 제출 입력이 아닙니다. 엄밀히 말하면 여러분이 옳다. 비록 내가이 솔루션을 발견했다면'image'와'submit' 입력 타입에 대해서도 유효하다. 어쨌든, [MDN article] (https://developer.mozilla.org/en-US/docs/HTML/Element/Input) : 'image : 그래픽 제출 버튼.'. [W3C] (http://www.w3.org/TR/html401/interact/forms.html)에서 '그래픽 제출 버튼을 만듭니다.' –

0
function checkShippingInfo(form){ 
     /* runs validation controls */ 

     var data = setDataForAjax; 
     $.ajax({ 
      type: 'GET', 
      url: '/include/checkAddresses.asp', 
      data: data, 
      async: false, 
      success: function (m) { 
       if (parseInt(m) == 0) { //use parseInt here to get integer value 
        /* I want to run form.submit only if m=0 */ 
        form.submit(); 
       } 
       else { 
        /* otherways I display a message */ 
        alert(m); 
        return false; 
       } 
      } 
     }); 
    } 
+0

감사합니다. 리턴 데이터 유형을 확인하는 것이 좋은 지적입니다. 그러나 그것은 해결책이 아닙니다. –