2012-07-13 2 views
3

제출할 때 일반적인 e.preventDefault()를 거쳐 대신 ajax 요청을 보내는 양식이 있습니다. 그러나이 Ajax 요청이 특정 조건을 반환하면 양식을 정상적으로 제출해야합니다. 이것을 어떻게 성취합니까? 귀하의 의견은 폼 변수를 변경 말한다 때문에jQuery override event.preventDefault()

// Submit handler 
$(".reserveer_form").submit(function(event){ 
    event.preventDefault(); 

    $.ajax({ 
    url: $(this).attr("action"), 
    data: $(this).serialize(), 
    success: function(data) { 
     if($(".messagered",data).length > 0){ 
     var errors = $(".messagered",data); 
     $(".gegevens").before(errors); 
     } else { 
      // SUBMIT THE FORM! 
     } 

    } 
    }); 

}) 
+1

$ (". reserveer_form")? – jeschafe

+3

@jeschafe 이렇게하면 infinte 루프가 발생할 수 있습니다 ... – Chandu

답변

6

양식의 기본 submit 메서드를 호출하여 jQuery 핸들러를 트리거하지 않도록합니다.

$.ajax({ 
    context: this, // <-- set the context. 
    url: $(this).attr("action"), 
    data: $(this).serialize(), 
    success: function (data) { 
     if ($(".messagered", data).length > 0) { 
      var errors = $(".messagered", data); 
      $(".gegevens").before(errors); 
     } else { 
      this.submit(); // <-- submit the form 
     } 
    } 
}); 
1

, 당신은 같은 형태의 변수를 확인하여 submit 핸들러를 시작할 수 있습니다. 변경된 경우 return true. 그렇지 않은 경우 현재 핸들러로 계속하십시오.

-1

당신은 submit() method 또는 양식을 사용할 수 있습니다

$(".reserveer_form").submit(function(event){ 
    event.preventDefault(); 
    var form = this, 
     $form = $(form); 

    $.ajax({ 
    url: $form.attr("action"), 
    data: $form.serialize(), 
    success: function(data) { 
     var errors = $(".messagered", data); 
     if (errors.length > 0){ 
     $(".gegevens").before(errors); 
     } else { 
     form.submit(); 
     } 
    } 
    }); 
}) 

그러나,이 이상한 아약스 요청 될 것으로 보인다. 먼저, 서버로 ajax를 통해 직렬화 된 양식을 보내고 응답에 오류가 없으면 다시 보냅니다. 서버는 두 번 처리합니다 (양식에 따라 두 번 작동합니다). 또한 사용자는 자신의 입력이 이미 처리되었다는 메시지를받지 못합니다. "제출"을 클릭하면 시각적으로 제출 될 때까지 시간이 걸립니다 (입력이 변경 될 수도 있습니다).

+0

jQuery 핸들러를 트리거하면 무한 루프가 발생합니다. –

+0

죄송합니다. 처음에는 단지 직접 사용하고 싶었지만 jQuery 인스턴스를 $ 형식으로 캐싱하여 동작을 변경한다는 것을 인식하지 못했습니다. – Bergi

+0

가능하면 DV를 제거 하겠지만 광산이 아닙니다. 나는이 요청이 이상하다고 생각하지는 않을 것이다. 필요한 서버 측 유효성 검사를 수행하는 중이고 오류가있는 경우 제출을 거부합니다. –

관련 문제