我有一个表单,我想在客户端验证,我正在使用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)
答案 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找到了这个解决方案。