首页 > 解决方案 > JQuery 验证问题:我在同一页面上有 2 个表单,每个表单在 2 个不同的选项卡中,但只有一个验证不起作用

问题描述

我在同一页面上有 2 个表单,但其中一个的验证不起作用!我不知道为什么.....以下代码显示了 2 个选项卡面板,每个面板包含 1 个表单。第二种形式不会触发任何验证,即使是对空输入的简单检查,但第一种有效!!!!有什么建议可以解决这个问题吗?我读了所有关于它的东西。这是一个遗留代码,请帮助。我不知道该怎么办了:)

    <div class="tab-content">
    
             <div role="tabpanel" class="tab-pane fade {% if not page.tab or page.tab == 'searchTab' or page.search_tab == 'variantTab' %}in active{% endif %}" id="searchVariantPane">
                  <div class="row" style="margin: 32px 0 0 0;">
                        <form method="get" action="{% url 'phenodbsearch:search' %}" id="searchForm" name="searchForm" class="form-horizontal">...</form>
                  </div>
             </div>
             <div role="tabpanel" class="tab-pane fade {% if not page.tab or page.tab == 'searchTab' or page.search_tab == 'geneTab' %}in {% endif %}" id="searchGenePane">
                  <div class="row" style="margin: 32px 0 0 0;">
                       <form method="get" action="{% url 'phenodbsearch:searchGene' %}" id="searchGeneForm" name="searchGeneForm" class="form-horizontal">
    <div class="row">
                    <div class="form-group">
                    <label for="gene" class="col-md-3 control-label">Gene :</label>
                            <div class="col-md-5">
                                 <input type="search" id="gene" name="gene" class="form-control" value="" placeholder="refgene gene name..." required autofocus />
                                 </div>
                            </div>
                        </div>
    
    <fieldset id="varTypeFieldSet" class="text-muted" disabled>
            <div class="row">
                     <div class="form-group">
                               <label for="variantype" class="col-md-3 control-label">Variant Type (required):</label>
                                   <div class="col-md-5">
                                         <select id="variantype" name="variantype" class="form-control input-md">
                                                 <option value="0">Select...</option>
                                                 <option value="1">SNV</option>
                                                 <option value="2">Indel</option>
                                          </select>
                                    </div>
                            </div>
                         </div>
                    </fieldset>
    
                                                    <div id="variantTypeIndelFold" class="collapse">
                                                        <div class="row">
                                                            <div class="form-group">
                                                                <label class="col-md-3 control-label">Variant Function (required):</label>
                                                                <div class="col-md-5">
                                                                    <select id="refgeneGeneLocationIndel" name="refgeneGeneLocationIndel" class="form-control input-md">
                                                                        <option value="0">Select...</option>
                                                                        <option value="1">Frameshift</option>
                                                                        <option value="2">Nonframeshift</option>
                                                                    </select>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
    
                                                    <div id="variantTypeSNVFold" class="collapse">
                                                        <div class="row">
                                                            <div class="form-group">
                                                                <label class="col-md-3 control-label">Variant Function (required):</label>
                                                                <div class="col-md-5">
                                                                    <select id="refgeneGeneLocationSNV" name="refgeneGeneLocationSNV" class="form-control input-md">
                                                                        <option value="0">Select...</option>
                                                                        <option value="1">Nonsynonymous</option>
                                                                        <option value="2">Exonic;splicing</option>
                                                                        <option value="3">Stopgain</option>
                                                                        <option value="4">Stoploss</option>
                                                                    </select>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
    
                                                    <fieldset id="gZygosityFieldSet" class="text-muted" disabled>
                                                        <div class="row">
                                                            <div class="form-group">
                                                                <label for="zygosity" class="col-md-3 control-label">Zygosity (required):</label>
                                                                <div class="col-md-5">
                                                                    <select id="zygosity" name="zygosity" class="form-control input-sm selectpicker" multiple>
                                                                        <option value="1">Heterozygous</option>
                                                                        <option value="2">Homozygous</option>
                                                                        <option value="3">Compound heterozygous</option>
                                                                        <option value="4">All</option>
                                                                    </select>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </fieldset>
    
                                                    <div class="row">
                                                        <p />
                                                    </div>
    
                                                    <fieldset id="gFeatureFieldSet" {% if not page.variants and not page.featureIDList %}class="text-muted" disabled{% endif %}>
                                                        {% for letter in 'ABCDEF' %}
                                                            {% with featureName=page.featureIDList|pElementValue:forloop.counter0 %}
                                                                <div id="gFeatureNameFold_{{ letter }}" class="collapse {% if letter in 'ABC' or featureName or page.featureIDList|length == forloop.counter0 %}in{% endif %}">
                                                                    <div class="row">
                                                                        <div class="form-group">
                                                                            {% if forloop.first %}
                                                                                <label for="features" class="col-md-3 control-label text-nowrap">Features (required):</label>
                                                                            {% else %}
                                                                                <div class="col-md-3"></div>
                                                                            {% endif %}
                                                                            <div class="col-md-5">
                                                                                <div class="input-group">
                                                                                    <input type="search" id="gFeatureName_{{ letter }}" name="gFeatureName" class="form-control input-sm gFeatureName" value="{% firstof featureName %}" data-target="#gFeatureNameFold_{{ letter|pIncrement }}" />
                                                                                    <span class="input-group-addon"><input type="checkbox" id="gFeatureExclude_{{ letter }}" class="gFeatureExclude" /> Exclude</span>
                                                                                </div>
                                                                                <input type="hidden" id="gFeatureID_{{ letter }}" name="gFeatureID" />
                                                                                <div id="gFeatureNameAutocomplete_{{ letter }}" class="autocomplete"></div>
                                                                            </div>
                                                                            {% if forloop.first %}
                                                                                <div class="col-md-4">
                                                                                    <div class="checkbox">
                                                                                        <label>
                                                                                            <input type="checkbox" id="gMatchAllFeatures" name="gMatchAllFeatures" value="true" /> Must match all features
                                                                                        </label>
                                                                                    </div>
                                                                                </div>
                                                                            {% endif %}
                                                                        </div>
                                                                    </div>
                                                                </div>
                                                            {% endwith %}
                                                        {% endfor %}
                                                    </fieldset>
    
                                                    <div class="row">
                                                        <div class="form-group">
                                                            <div class="col-md-offset-3 col-md-7">
                                                                <p>
                                                                    Features entered here will be shared with submitters if there is a match, and submission features be shared with you. There are optional, a least three need to be entered to be shared, up to six can be specified.
                                                                </p>
                                                            </div>
                                                        </div>
                                                    </div>
    
    
                                                  
                                                  
                                                    <div class="row">
                                                        <br />
                                                    </div>
    
                                                    <div class="row">
                                                        <div class="form-group">
                                                            <div class="col-md-offset-3 col-md-2">
                                                                <button type="submit" id="searchSubmitGene" class="btn btn-default btn-block" disabled>Search</button>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </form>
                                            </div>
                                        </div>
                                    </div>
    
    

 1. First form validation: works well!!!
        
        $('#searchForm').each(function (){
            $(this).validate({
                onkeyup: false,
                invalidHandler: validatorErrorHandlerFunction,
                rules: {
                    variant: {
                        required: true,
                    },
                    searchSubmit: {
                        depends: function (element) {
                            if ($('#variant').val() === "") {
                                return true
                            }
                        }
                    }
                },
                messages: {
                    variant: {
                        required: 'An variant is required to begin a search',
                    },
                },
                highlight: function (element) {
                    $(element).closest('.form-group').addClass('has-feedback has-warning');
                },
                unhighlight: function (element) {
                    $(element).closest('.form-group').removeClass('has-feedback has-warning');
                    $(element).prev('.glyphicon').remove();
                },
                errorPlacement: function (error, element) {
                    $(element).before('<span class="glyphicon glyphicon-warning-sign form-control-feedback"></span>');
                    $(element).after(error);
                }
            });
        });
    
 2. Second form validation => not trigger any validation
  
        $('#searchGeneForm').each(function() {
            $(this).validate({
                onkeyup:    false,
                invalidHandler: validatorErrorHandlerFunction,
                rules: {
                    gene: {
                        required:   true,
                    },
                    searchSubmitGene: {
                        depends: function (element) {
                             if ($('#gene').val() === "") {
                                    return true
                             }
                        }
                    }
                },
                messages: {
                    gene: {
                        required:   'A gene is required to search',
                    },
                },
                highlight: function(element) {
                    $(element).closest('.form-group').addClass('has-feedback has-warning');
                },
                unhighlight: function(element) {
                    $(element).closest('.form-group').removeClass('has-feedback has-warning');
                    $(element).prev('.glyphicon').remove();
                },
                errorPlacement: function(error, element) {
                    $(element).before('<span class="glyphicon glyphicon-warning-sign form-control-feedback"></span>');
                    $(element).after(error);
                }
            });
        })

标签: jqueryjquery-validate

解决方案


$('#searchForm').each(function...

使用该选择器,您正在尝试使用id="searchForm".

然而...

  • 您似乎只有一个带有此 ID 的表单
  • 但是如果您有两个具有相同 ID 的表单,那么您的HTML 无效,并且一个元素将被完全忽略。

在任何情况下,您都需要选择两者共同的东西。例如,在两个表单上分配相同的类并使用它来代替......

<form id="form_1" class="myFormClass">...</form>

<form id="form_2" class="myFormClass">...</form>
$('.myFormClass').each(function() {...

推荐阅读