3

送信すると、通常どおりe.preventDefault()、代わりにajaxリクエストを送信するフォームがあります。ただし、このajaxリクエストが特定の条件を返す場合は、フォームを正常に送信する必要があります。どうすればこれを達成できますか?

// 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!
      } 
      
    }
  });

})
4

3 に答える 3

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
        }
    }
});
于 2012-07-13T14:30:42.537 に答える
1

コメントにはフォーム変数を変更すると書かれているので、submit同じフォーム変数をチェックしてハンドラーを開始できます。変更された場合は、return true。そうでない場合は、現在のハンドラーを続行します。

于 2012-07-13T14:28:31.520 に答える
-1

submit()次の方法またはフォームを使用できます。

$(".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リクエストのようです。まず、フォーム(シリアル化、ajax経由)をサーバーに送信し、応答にエラーが含まれていない場合は、もう一度送信しますか?サーバーはそれを2回処理します(フォームによっては2回動作します)。また、ユーザーは自分の入力がすでに処理されているというメッセージを受け取りません。[送信]をクリックすると、表示されるように送信されるまで(入力を変更することもできます)、常に時間がかかります。

于 2012-07-13T14:30:24.613 に答える