一旦错误检查打破它,表单将不会提交

时间:2013-03-21 19:09:55

标签: javascript jquery forms

我正在处理一个项目,我有一些错误检查。但是,表格每次都要提交,所以我不得不打破提交。这就是我所做的。

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "order-form" }))
{
...

<input type="submit" name="btnSaveOpv@(item.Id)" value="@T("Admin.Common.Save")" id="btnSaveOpv@(item.Id)" class="adminButton" style="display: none;" onclick="SaveBtn(@item.Id);" />

...

    var originalIssuedQty = 0;

    function SaveBtn(id) {
    var quantity = parseInt($("#pvQuantity" + id).val());
    var issuedQty = parseInt($("#pvIssuedQty" + id).val());
    var stockQty = parseInt($("#hfStockQty" + id).val());
    var availableStockQty = stockQty + parseInt(originalIssuedQty);

    //Issued Quantity cannot exceed Quantity (you can't issue more than requested)
    if (issuedQty > quantity) {
    alert("Issued Quantity cannot exceed Quantity.");
    $("#order-form").submit(function (e) { e.preventDefault(); });
    return false;
    }

    //Make sure Issued Quantity is within Available Stock Quantity
    if (issuedQty > availableStockQty) {
    alert("There is not enough Products in Stock to issue this amount.");
    $("#order-form").submit(function (e) { e.preventDefault(); });
    return false;
    }

    //Present confirmation
    var result = confirm('@T("Admin.Common.AreYouSure")');
    if (!result) {
    $("#order-form").submit(function (e) { e.preventDefault(); });
    return false;
    }
    else {
    $("#order-form").submit(function (e) { this.submit(); });
    //$("#order-form").submit(function (e) { return true; });
    }
    }    
    ...
}

这是问题所在。每当我尝试第一次提交而不触发任何错误检查时,事情就会起作用。当我触发错误检查时,一切正常。但是,如果我修复错误并尝试再次提交,页面只会刷新。任何有关这方面的想法都会非常有帮助。感谢。

2 个答案:

答案 0 :(得分:2)

你的事情太复杂了。

这是一个关于如何进行验证以及如何在无效时停止提交表单的基本模板:

$(function() {
  $("#order-form").submit(function (e) {
    var isValid = false;

    // Do your validation here and put the result in the variable isValid

    if ( !isValid ) {
      e.preventDefault(); // If the form is invalid stop the submit, otherwise proceed
    }
  });
});

答案 1 :(得分:2)

每次拨打$("#order-form").submit(function (e) { whatever });时,都会添加附加处理函数。它不会删除您已添加的处理程序。这可能就是它破裂的原因。

反复更改submit事件处理程序是一种混乱的方法。相反,你应该有一个处理提交事件的函数,该函数应该(或调用)错误检查,并在必要时preventDefault()(如ZippyV建议的那样)。