3

return false;フォームを送信する前に、フォームから外部スクリプトにデータを送信しようとしていますが、フォーム自体を使用しない限り、データを外部スクリプトに送信できないようです。

$(document).ready(function () {

  // Handle Form-Submission
  $("#mainForm").submit(function () {

    // Reset Error Array
    errors = new Array();

    /* Validation Code Removed - Not Relevant */        

    // Check if errors exist
    if (errors.length > 0) {
      return false;
    } else {
      $("div.errors").html("");
      $.post("post.php",{
        "First Name": name_first.val(),
        "Last Name": name_last.val(),
        "Home State": home_state.val(),
        "Primary Email": email_primary.val()
      });
    }
    return false; /* Remove this line, and the $.post won't work. */
  });
});
4

2 に答える 2

8

今日、まったく同じ問題に遭遇しました。Marc が言うように、それは ajax 呼び出しが非同期だからです。最も簡単な修正は、同期化することです。

次のような ajax 呼び出しの前に .ajaxSetup() を使用します。

$.ajaxSetup({async: false});
于 2009-02-07T06:51:11.180 に答える
2

2 つのエンドポイントへの送信

を使用する代わりに、このようなことを試してみますasync: true。非常に複雑ですが、インターフェイスがフリーズすることはありません。

 $(document).ready(function(){           
  // Handle Form-Submission
 $("#mainForm").submit(function(e){  
    e.preventDefault();
    var $form = $(this);

    if($form.data('submitting')) return; // Avoid double submissions
    $(':submit').attr('disabled','disabled'); // Disable the submit button

    // Reset Error Array
    errors = new Array();

    /* Validation Code Removed - Not Relevant */        

    // Check if errors exist
    if (errors.length > 0) {;
      $(':submit').removeAttr('disabled'); // Enable the submit button
      return false;
    } else {
      $("div.errors").html("");
      $form.data('submitting',true); // Flag that a submission has started
      $.post("post.php",{
        "First Name":name_first.val(),
        "Last Name":name_last.val(),
        "Home State":home_state.val(),
        "Primary Email":email_primary.val()},
        function(){
          // remove our special handler and submit normally
          $form.unbind('submit').submit();
        }
      );
    }
  });
});

元の回答

$.postJavaScriptが有効になっている場合に使用したいが、JavaScriptを無効にしてフォームを正常に機能させたいというハングアップがあるようです。

ただし、JavaScript無効になっていると実行されないため、関数の動作の変更について心配する必要はありませんsubmit

return false;ステートメントを残すか、使用することができます

$("#mainForm").submit(function(e){  
  // all your existing code

  e.preventDefault();
}

これにより、フォームが正常に送信されなくなり、代わり$.postに JavaScript が有効になっているときにメソッドが使用されます。無効にすると、通常どおり送信されます。

preventDefaultreturn falseイベントのバブリングを通常どおり継続させたいが、デフォルトのブラウザー アクションは継続させない場合は、このオプションを使用することをお勧めします。return falseを呼び出すのと同等ですe.preventDefault(); e.stopPropagation();

于 2010-01-24T07:00:42.667 に答える