jQuery Validate Plug-in 无法验证前半部分的问题

Posted

技术标签:

【中文标题】jQuery Validate Plug-in 无法验证前半部分的问题【英文标题】:Problem with jQuery Validate Plug-in not validating first half form 【发布时间】:2011-07-16 05:31:47 【问题描述】:

我将 jQuery 与 Validate Plugin 和 Nathan Long 的绝妙方法 require_from_group 一起使用,不幸的是,我在验证表单内的其他字段时遇到了问题。

必填字段集之上的任何内容都无法正确显示其错误消息。

这个(加上 jQuery 1.4.2 和验证插件)是我的代码:

<form>

<label for="fullName">Name <em>required</em></label>
<input id="fullName" name="fullName" type="text" class="required"><br />

<fieldset>
<legend>Enter 1 of 3 emails <em> required</em></legend>
<label for="field1">field1</label><input id="field1" class="group_required email" type="text" name="field1" /><br />
<label for="field2">field2</label><input id="field2" class="group_required email" type="text" name="field2" /><br />
<label for="field3">field3</label><input id="field3" class="group_required email" type="text" name="field3" /><br />
</fieldset>

<input name="submitbutton" type="submit" />

</form>


<script>
jQuery.validator.addMethod("require_from_group", function(value, element, options) 
    numberRequired = options[0];
    selector = options[1];
    //Look for our selector within the parent form
    var validOrNot = $(selector, element.form).filter(function() 
         // Each field is kept if it has a value
         return $(this).val();
         // Set to true if there are enough, else to false
      ).length >= numberRequired;

        if(!$(element).data('being_validated')) 
            var fields = $(selector, element.form);
            //.valid() means "validate using all applicable rules" (which 
            //includes this one)
            fields.data('being_validated', true).valid();
            fields.data('being_validated', false);
        
        return validOrNot;
        // 0 below is the 0th item in the options field
    , jQuery.format("Please fill out at least 0 of these fields."));


$(document).ready(function()

    $("form").validate(
         debug: true,
    );

    jQuery.validator.addClassRules("group_required", require_from_group: [1, ".group_required"]);

);

</script>

实际页面更复杂,但这就是您复制问题所需的所有代码。在不填写任何字段的情况下提交表单,您将在组中的 3 旁边看到一条错误消息,而不是名称字段。如果名称字段在字段集验证后位于 html 中,则它可以正常工作。赋予名称字段焦点然后模糊确实会产生正确的错误消息,但它没有出现在提交时。

我在原始问题的 cmets 中看到其他人遇到此问题,但没有看到任何回复 :(

注释掉:

fields.data('being_validated', true).valid();

修复了错误消息显示问题,但重新引入了 Nathan 试图解决的问题。

【问题讨论】:

【参考方案1】:

其他字段不需要添加规则吗?

$("form").validate(
    debug: true,
    rules: 
        'fullName': 
            required: true
        
    
);

【讨论】:

'class="required"' 足以让 fullName 字段根据需要进行验证。如果我点击进出该字段,它就会起作用。

以上是关于jQuery Validate Plug-in 无法验证前半部分的问题的主要内容,如果未能解决你的问题,请参考以下文章

jQuery.validate 表单动态验证

jQuery Validate验证框架详解(jquery.validate.min.js)

Jquery Validate Plugin 仅应用包含 jquery.validate.min 文件的规则

jquery.validate使用攻略(表单校验)

jquery.validate+jquery.form提交的三种方式

jquery.validate.unobtrusive的使用