【问题标题】:How to prevent an HTML form from being submitted if the conditions went false?如果条件不成立,如何防止提交 HTML 表单?
【发布时间】:2016-09-04 09:09:02
【问题描述】:

我有一个简单的@Html.BeginForm(),其中包含一些隐藏字段,如下所示:

@using (Html.BeginForm("AddToCart", "ShoppingCart", new { id = Model.ProductID }))
 {
   @Html.HiddenFor(m => m.SelectedQuantity, new { @id = "selectedquantity" })
   @Html.HiddenFor(m => m.AvailableColors, new { @id = "selectedcolor" })
   @Html.HiddenFor(m => m.SelectedSizes, new { @id = "selectedsize"})
   @Html.HiddenFor(x => x.ProductID)
   @Html.Hidden("returnUrl", Request.Url.PathAndQuery)

   <input id="submit" type="submit" class="btn btn-primary" value="Add to cart" />
 }

我想阻止表单在隐藏字段值为空时提交,这可能吗?如果是怎么办? 隐藏字段值由以下脚本更新。

<script type="text/javascript">
    $(function () {
        $("#quantity").on("change", function () {
            var quantity = $(this).val();
            $("#selectedquantity").val(quantity).val();
        });
    });
</script>
<script type="text/javascript">
    $(document).ready(function () {

        $("#selectable").selectable({
            selected: function (event, ui) {
                $(ui.selected).siblings().removeClass("ui-selected");
                $("#selectedsize").val($("#selectable>li.ui-selected").html());
            }
        });

        $("#selectable1").selectable({
            selected: function (event, ci) {
                $(ci.selected).siblings().removeClass("ui-selected");
                $("#selectedcolor").val($("#selectable1>li.ui-selected").html());
            }
        });

    });
</script>

【问题讨论】:

    标签: jquery forms razor


    【解决方案1】:

    您可以在表单中添加“onsubmit”;

    @using (Html.BeginForm("AddToCart", "ShoppingCart", new { id = Model.ProductID, onsubmit = "validateForm()" }))
    

    然后声明函数validateFormlike:

    function validateForm(event) {
      event.preventDefault();
      if ($("#selectedquantity").val() === '' || $("#selectedcolor").val() === '' || $("#selectedsize").val() === '') {
        return false;
      }
      return true;
    }
    

    更一般地说,只要您的验证函数返回false,那么您的表单就不会被提交。

    【讨论】:

    • 我是这样做的,但它仍在提交表单!
    • 函数validateForm被调用了吗?
    • 如何检查?调试?
    • 是的,使用调试器或只是 console.log 来确保它被调用。
    • 当我检查时请看看更新问题。
    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2016-06-30
    相关资源
    最近更新 更多