0

エラーチェックを行うプロジェクトに取り組んでいます。ただし、フォームは毎回送信する必要があったため、送信を中断する必要がありました。これが私がしたことです。

@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; });
    }
    }    
    ...
}

これが問題です。エラーチェックをトリガーせずに初めて送信しようとするときはいつでも、うまくいきます。エラーチェックをトリガーすると、うまくいきます。ただし、エラーを修正して再度送信しようとすると、ページが更新されるだけです。これに関するアイデアは非常に役立ちます。ありがとう。

4

2 に答える 2

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
    }
  });
});
于 2013-03-21T19:48:52.283 に答える
2

を呼び出すたびにハンドラー関数$("#order-form").submit(function (e) { whatever });を追加します。すでに追加したハンドラーは削除されません。これがおそらくそれが壊れる理由です。

イベントハンドラーを繰り返し変更するのsubmitは面倒な方法です。代わりに、送信イベントを処理する単一の関数が必要であり、その関数はエラーチェックを実行(または呼び出す)し、preventDefault()必要に応じて(ZippyVが提案しているように)実行する必要があります。

于 2013-03-21T19:49:48.053 に答える