jquery 验证插件:验证隐藏输入,跳过所需的输入文本

Posted

技术标签:

【中文标题】jquery 验证插件:验证隐藏输入,跳过所需的输入文本【英文标题】:jquery validation plugin: validating hidden input, skips required input text 【发布时间】:2013-02-09 03:20:10 【问题描述】:

我正在尝试验证具有隐藏和非隐藏输入的表单。我在表单验证设置中添加了行 ignore: "" 来验证隐藏的输入,但是这样做,它不会验证它之前的所需文本输入,但只有在它之后才验证。 发生的另一件事是,firstname 的验证在第一次提交后对 blur 起作用(但它仍然不会阻止提交本身)....

这是我的代码,以及 js fiddle DEMO 的链接:

JS:

    var countries = [label:"Vanuatu", code:"VU",
        label:"Ecuador", code:"EC"];    
    $().ready(function() 
$('#country').autocomplete(
    source : function(request, response) 
        var matcher = new RegExp('^'+$.ui.autocomplete.escapeRegex(request.term), "i");
        response($.grep(countries, function(element, index) 
            return matcher.test(element.label);
        ));
    ,
    delay : 0,
    change : function(event, ui) 
        $('#countryCode').val(ui.item ? ui.item.code : '');
    
);
$("#signupForm").validate(
    ignore: "",
    rules: 
        firstname: 
            required: true
        ,
        lastname: 
            required: true
        ,
        country: 
            required: true
        ,
        countryCode: 
            required: function(element)
                return $("#signupForm").validate().element( "#country" );
            
        ,
        email: 
            required: true,
            email: true
        
    ,  
    messages: 
        firstname: "Please enter your first name",
        lastname: "Please enter your last name",
        country: "Please select a country",
        countryCode: "Please select a valid country",
        email: "Please enter a valid email address"
    ,
    submitHandler: function(form) 
        alert("fine!");
    
);

); html 表单:

    <form id="signupForm" method="post" name="" action="">
<p>
        <label for="firstname"></label>
        <input class="inputText" type="text" id="firstname" name="firstname" placeholder="First Name">
    </p>
            <p>
        <label for="country"></label>
        <input class="inputText" type="text" id="country" name="country" placeholder="Country"/>

        <input type="hidden" name="countryCode" id="countryCode" />
    </p>
                <p>
        <label for="lastname"></label>
        <input class="inputText" type="text" id="lastname" name="lastname" placeholder="Last Name">
                    </p>
                    <p>
        <label for="email"></label>
        <input class="inputText" type="text" id="email" name="email" placeholder="Email">
                        </p>
                        <p>
        <input class="submit" type="submit" id="signupButton" value="SUBMIT" />   
                        </p>
    </form> 

【问题讨论】:

countryCode 验证的逻辑是什么?只有在指定country 时才需要? 是的,因为我需要验证是否从自动完成中选择了一个有效的国家。这样我就有了填写国家的验证,并选择了国家代码(国家代码是服务器端需要的)。 你能检查一下jsfiddle.net/arunpjohny/68uu5/3,看看是否满足你的要求 另请参阅此答案以了解使用 ignore 选项的正确方法。应该是ignore: [] 见***.com/a/8565769/594235 【参考方案1】:

我认为问题在于countryCode 验证

你可以试试

countryCode: 
    required: function(element)
        return $("#country").val().length > 0;
    

演示:Fiddle

【讨论】:

非常感谢!我认为 country 元素上的 .validate() 会做到这一点....您认为向开发人员报告这是一个错误吗? 我认为element 方法被设计为与回调方法一起调用,您可以向开发人员询问任何方式

以上是关于jquery 验证插件:验证隐藏输入,跳过所需的输入文本的主要内容,如果未能解决你的问题,请参考以下文章

在国家代码下拉列表中添加所需的验证 [ intl-tel-input jquery plugin ]

jQuery 不显眼的表单验证器在重置表单时不会隐藏错误消息

Jquery验证跳过无效输入

隐藏 WooCommerce 结帐字段后删除所需的验证

jQuery 验证错误放置和所需的文本放置

验证 .validate() 规则 jquery 函数上所需的单选按钮