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

发送到两个端点

我会尝试这样的事情而不是使用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();
        }
      );
    }
  });
});

原始答案

看来你的挂断是你想在$.post启用 JavaScript 的情况下使用,但在禁用 JavaScript 的情况下让表单正常运行。

但是,由于如果禁用JavaScript,您的 JavaScript将不会运行,您不必担心更改函数中的行为。submit

您可以留下您的return false;陈述,或使用

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

  e.preventDefault();
}

这将使表单无法正常提交,而是在启用$.postJavaScript 时使用您的方法。如果它被禁用,它将正常提交。

preventDefaultreturn false如果您希望事件冒泡正常继续,但保持默认浏览器操作不继续,则首选。return false相当于调用e.preventDefault(); e.stopPropagation();

于 2010-01-24T07:00:42.667 回答