在preventDefault()之后发送表单,缺少'表单数据'

时间:2013-10-09 14:46:13

标签: javascript jquery asp.net-mvc forms

在提交表单之前,我使用Ajax将数据发送到控制器(InsertLead),然后我发布表单('SendForm()'),但缺少'表单数据'。

我正在测试chrome:developers-tools

这是我的代码:

  $(document).ready(function () {
      var request;
      $('#frm1').submit(function (e) {
          event.preventDefault();
          var referredUser = new ReferredUser();
          referredUser.UserName = $("#fullname1").val();
          referredUser.UserPhone = $("#mobilephone1").val();
          referredUser.UserEmail = $("#email1").val();           
          referredUser.Country = $("#country1").val();
          referredUser.ReferrerEmail = '@Model.ReferrerEmail';

          if (referredUser.UserEmail.value == "") { return false; }
          else {
              $('#overlay').show()
              if (request) {
                  request.abort();
              }

              // setup some local variables
              var $form = $(this);

              // select and cache all the fields
              var $inputs = $form.find("input, select, button, textarea");

              // serialize the data in the form
              var serializedData = JSON.stringify(referredUser);

              // disable the inputs for the duration of the ajax request
              $inputs.prop("disabled", true);

              // fire off the request to the form
              request = $.ajax({
                  url: "/Forms/InsertLead",
                  type: "post",
                  data: serializedData,
                  contentType: 'application/json'
              });

              request.done(function (response, textStatus, jqXHR) {
                  $('#overlay').hide()                   
              });

              request.always(function () {
                  SendForm();
                  // re-enable the inputs
                  $inputs.prop("disabled", false);
              });
          }
      });
  });

  function SendForm() {
      var serial = '@Model.SerialId';

      if (serial.val == "") {
          serial = '-1';
      }

      var formURL = '@regFormURL';

      $('#frm1').attr('action', formURL + '?SerialId=' + serial);
      document.regForm1.submit();
  }    

表格:

<form name="regForm1" method="post" id="frm1" action="-1">
    <input type="text" name="RegistrationModel.FullName" id="fullname1" />
    <input type="text" name="RegistrationModel.Email" id="email1" />

2 个答案:

答案 0 :(得分:3)

你正在防止错误的事件。使用

$('#frm1').submit(function (e) {
    e.preventDefault();
// (...)

答案 1 :(得分:1)

我猜禁用的输入将不会被发布。 http://www.w3.org/TR/html401/interact/forms.html#adef-disabled

  

禁用的控件无法成功。

您应该只读取http://www.w3.org/TR/html401/interact/forms.html#adef-readonly

  

只读元素可能会成功。

或在调用SendForm()

之前重新启用它们