2011-01-02 1 views
2

false를 반환해야합니다JQuery와 양식 검사가 true를 반환하지만 양식을 제출이 양식 검사를 실행하고

스크립트가 작동
if((formData[4].value == 1 || formData[4].value == 2) && !formData[2].value) { 
    alert('Please fill out the key field'); 
    return false; 
} else { 
    $.ajax({ 
     url: "/ajax/key_check.php", 
     cache: false, 
     data: "key=" + formData[4].value, 
     dataType: "html", 
     success: function(data) { 
      if(data == 1) { 
       alert('Key already exists'); 
       return false; 
      } 
     } 
    }); 

    return true; 
} 

, 그것은 그러나, 데이터 == 1 않는 경우 키가 이미 경고 양식은 여전히 ​​제출됩니다. 그러나 나는 그것을 계속 어쨌든 키를 추가하고 이미 키를 팝업 메시지가 존재하는 데이터 == 1 처리에서 양식을 중지 할 경우 false를 반환으로 생각했다. 데이터가 == 1 인 경우 양식 제출을 중단 할 수 있습니까? 나는 이것을 시도했다 :

if(data == 1) { 
    alert('Key already exists'); 
    return false; 
} else { 
    return true; 
} 

그런 다음 스크립트 맨 아래에서 return true를 제거했지만 동일한 문제가 발생합니다. 팝업이 나오지만 양식이 여전히 처리됩니다. 콜백에서

+0

이 코드는 이벤트 처리기의 일부라고 가정합니다. 이 코드는 어떤 이벤트에 응답합니까? –

+0

앤드류 휘태커는 실제로 임 양식을 사용 아약스 호출을 만드는 jQuery 플러그인을 사용하여. 코드에서 action = ""값의 URL로 가기 전에 실행할 함수를 지정할 수 있습니다. 그래서이 형태의 함수. 전에 아약스 호출없이 작동하지만 키를 추가하기 전에 키가 이미 있는지 알아야합니다. – John

답변

3

return는 콜백에서 를 반환하지 않는 부모 함수 당신이 원하는 것처럼 ... 그러나 당신 같은 당신이 원하는 효과를 얻을 수 있습니다 :이 무엇

if((formData[4].value == 1 || formData[4].value == 2) && !formData[2].value) { 
    alert('Please fill out the key field'); 
    return false; 
} else { 
    $.ajax({ 
     url: "/ajax/key_check.php", 
     cache: false, 
     data: "key=" + formData[4].value, 
     dataType: "html", 
     success: function(data) { 
      if(data == 1) { 
       alert('Key already exists'); 
      } else { 
       $("#someForm")[0].submit(); 
      } 
     } 
    }); 
    return false; 
} 

을 직접 제출 없지만, 점검 결과가 정상 경우, 양식을 제출하고 다시이 핸들러를 실행하지 않는 경우 * 기본 .submit() method를 호출 않습니다.

+0

나는 같은 대답을했지만,()'jQuery의'.submit를 사용했지만, 그것은 제출 핸들러의 무한 루프를 일으킬 것이라고 상상했다. 그래서 네이티브'submit()'을 사용했을 것이다. 그게 맞습니까? 편집 : 나는 당신이 마지막 문장에서 언급 한 것을 참조하십시오. – user113716

+1

@patrick - 예, 정확하게, 나는이 핸들러가 어떤 핸들러인지에 대한 질문에 기초하지는 않았지만, 여기에 루프를 넣는 것이 중요합니다. 그래서 루프는 확실히 걱정입니다. –

0

AJAX 요청이 — 인 경우 A0AXX 요청이 성공 함수 을 호출합니다. 외부 함수가 true를 반환하면 문제가 발생합니다. 성공 함수 (외부 함수가 아님)가 false를 반환하면 양식 제출 여부에 영향을주지 않습니다.

당신은 항상 일반적으로 양식을 제출하는 외부 함수에서 false를 반환하고 AJAX 성공 기능에서 유효성 검사가 성공하면, unbind the initial submit handler 및 형태의 .submit() method를 사용해야합니다

:

을 (에서 이 코드 샘플, 나는 form 양식의 기본 DOM 요소를 감싸는 jQuery를 객체라고 가정합니다.)

success: function(data) { 
    if(data == 1) { 
     alert('Key already exists'); 
    } else { 
     form.unbind('submit'); // Prevent the AJAX validation from happening again 
     form.submit(); // Submit the form normally 
    } 
} 

또는 브라우저의 native form.submit() method하고 "바인딩 해제"라인이되지 않습니다 호출 할 수 있습니다 필요한 :

form[0].submit(); 
+0

아직도이 플러그인을 사용하여 작동하지 않습니다. 누군가 예제 코드를보고 어떻게 Ajax 호출을 통합 할 수 있는지 말해 줄 수 있습니까? http://jquery.malsup.com/form/#ajaxForm – John