使用 jquery 插件验证器验证具有 as bootstrap 模态的表单的正确方法是什么

What is the proper way to validate a form with as bootstrap modal using jquery plugin validator

我正在尝试验证 bootstrap 模态框内的表单,但是当加载页面时,插件中的验证函数找不到该表单,因为它已被模态框隐藏 class。我如何在表单随模态消失之前验证表单。 当我单击操作以打开模式时,我尝试使用 validate() 但当我尝试提交时,我不断收到以下错误消息: TypeError: $element[0] 未定义 这是我在单击 "Save changes" 按钮时用来验证的代码 (JS):

 $('#SavePortInfo').click(function() {
            $("#PortNumberForm").validate();
                var ValidStatus = $("#PortNumberForm").valid();

                if (ValidStatus == false) {
                    console.log('Form no GOOD');
                }else
                {
                    $("#PortNumberForm").submit();
                }

        });

这是我的模态代码

<div id="PortNumberModal" class="modal fade">
    <div class="modal-dialog" style="width:60%">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button>
                <h4 class="modal-title">Port Number Information</h4>
            </div>
            <div class="modal-body">
                <form class="form-horizontal" id="PortNumberForm" name="PortNumberForm">
                    <fieldset>

                        <!-- Form Name -->


                        <!-- Prepended checkbox -->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="VOIP-PORT-5">Acknowledge Disconnect of Previous Phone</label>
                            <div class="col-md-2">
                                <div class="input-group">
  <span class="input-group-addon">
      <input type="checkbox" class="required">
  </span>
                                    <input id="VOIP-PORT-5" name="VOIP-PORT-5" class="form-control required" placeholder=""  type="text">
                                </div>

                            </div>
                        </div>

                        <!-- Text input-->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="VOIP-PORT-4B">CIty on Previous Phone Account</label>
                            <div class="col-md-4">
                                <input id="VOIP-PORT-4B" name="VOIP-PORT-4B" placeholder="CIty on Previous Phone Account" class="form-control input-md required"  type="text">
                                <span class="help-block">Please enter the city from your current telephone account</span>
                            </div>
                        </div>

                        <!-- Text input-->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="VOIP-PORT-4A">The First Line of the Address on my Current Phone Account</label>
                            <div class="col-md-4">
                                <input id="VOIP-PORT-4A" name="VOIP-PORT-4A" placeholder="placeholder" class="form-control input-md required" required type="text">

                            </div>
                        </div>

                        <!-- Text input-->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="VOIP-PORT-3">The Name on my Current Phone Account</label>
                            <div class="col-md-4">
                                <input id="VOIP-PORT-3" name="VOIP-PORT-3" placeholder="placeholder" class="form-control input-md required" required type="text">

                            </div>
                        </div>

                        <!-- Text input-->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="VOIP-PORT-2">My Current Phone Number</label>
                            <div class="col-md-4">
                                <input id="VOIP-PORT-2" name="VOIP-PORT-2" placeholder="" class="form-control input-md required" required type="text">

                            </div>
                        </div>

                        <!-- Text input-->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="VOIP-PORT-4-ZIP">The Zip Code of the Address on my Current Phone Account</label>
                            <div class="col-md-4">
                                <input id="VOIP-PORT-4-ZIP" name="VOIP-PORT-4-ZIP" placeholder="" class="form-control input-md required" required type="text">

                            </div>
                        </div>


                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-primary" id="SavePortInfo">Save changes</button>
                </form>
            </div>
            <div class="modal-footer">

            </div>

        </div>
    </div>
</div>

任何帮助都是appreciated.thank你。

原来问题不在 JS 中,而是在第一个输入字段(收音机)中。它没有属性名称和 ID,因此它破坏了验证器。

您的代码...

$('#SavePortInfo').click(function() {
    $("#PortNumberForm").validate();
    var ValidStatus = $("#PortNumberForm").valid();

    if (ValidStatus == false) {
        console.log('Form no GOOD');
    } else {
        $("#PortNumberForm").submit();
    }
});

您不需要在 click 处理程序中调用 .validate().validate() 方法只应在 DOM 准备好初始化表单上的插件时调用一次。由于自动捕获提交按钮的点击,因此通常 不需要点击处理程序。但是,我看到你有一个 type="button",所以在这种情况下你需要 click 处理程序。

只需拉出 .validate() 方法,以便在第一次单击之前初始化并准备好表单验证。另外,这样您就不会重复调用 .validate() 。由于所有对 .validate() 的后续调用都被有效地忽略了,因此每次单击按钮时都不必要地 运行 代码。

$(document).ready(function() {

    $("#PortNumberForm").validate();  // initialize plugin

    $('#SavePortInfo').click(function() {  // capture click and test/submit
        var ValidStatus = $("#PortNumberForm").valid();

        if (ValidStatus == false) {
            console.log('Form no GOOD');
        } else {
            $("#PortNumberForm").submit();
        }
    });

});

您还缺少 checkbox 上的 name 属性...

<span class="input-group-addon">
     <input type="checkbox" class="required">
</span>

jQuery 验证插件无法处理不包含唯一 name 属性的元素,因为这是此插件跟踪所有内容的方式。

<span class="input-group-addon">
     <input type="checkbox" name="foo" class="required">
</span>