复选框不会验证

时间:2013-03-06 14:29:18

标签: jquery jquery-validate

我有一个表单,我想在客户端验证,我正在使用jQuery Validate来完成任务。验证适用于其他(输入)字段,但不适用于复选框。

我做错了什么?

<form name="insert_new_lesson" id="insert_new_lesson" method="post" action="" class="lesson-form" enctype="multipart/form-data" novalidate="novalidate">
    <input class="{category: true}" type="checkbox" name="category[]" value="15" id="grade15">
    ... rest of the fields...


$("#insert_new_lesson").validate({
    errorPlacement: function (error, element) { 
        error.insertBefore(element);    
    },
    rules: {
        category: {
            required: 'input[type="checkbox"]:checked',
        },
        ...rest of the fields (validation works)

4 个答案:

答案 0 :(得分:1)

jQuery Validator的当前问题。 See this issue在官方存储库中。

正如其中一条评论中所述,您必须执行以下操作才能验证具有相同名称的字段:

$.validator.prototype.elements = function() {
    var validator = this;
    // select all valid inputs inside the form (no submit or reset buttons)
    return $(this.currentForm)
        .find(":input")
        .not(":submit, :reset, :image, [disabled]")
        .not( this.settings.ignore )
        .filter(function() {
            !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
            return validator.objectLength($(this).rules());
        });
};

请注意,我已经修改了GitHub中评论的代码。用户dsand1234使用find("input"),第5行应为find(":input")

答案 1 :(得分:1)

试试这个:

$.validator.addMethod('atLeastOne', function(value, element, param) {
    return $('input[name^="category"]').is(':checked');
}, 'Please select at least one checkbox');

$(function() {
    $("#insert_new_lesson").validate({rules: {
            'category[]': 'atLeastOne'
        }, groups: {
            checkboxes: 'category[]'
        }, errorPlacement: function(error, elem) {
            if (elem.attr('name').match(/category\[\]/)) {
                $('input[name^="category"]:last').next().after(error);
            }
            else {
                elem.next().after(error);
            }
        }
    });
});

答案 2 :(得分:0)

你能为json尝试这种语法(单引号在外面,双引用键):

class='{"category": true}'

答案 3 :(得分:0)

这对我有用,是一个简单的解决方案。只需在引号中附上规则中的“名称”即可。

rules: {
    'category[]': {
        required: true
    }
}

我在another post here找到了这个解决方案。