jQuery:validation是否选中了多个复选框之一(不同的名称,使用jQuery Validation Plugin)

我有一个包含许多复选框的表单(使用自己的规则有太多意义),我需要使用jQuery Validation Plugin来确保至少选中其中一个。 它们都有不同的名称,因此我到目前为止通过Google搜索找到的大部分解决方案都不适用于我。

但是,我遇到了这篇文章,我稍微调整了一下这个扩展方法:

// method for checking out checkboxes for the form validation $.validator.methods.checkboxes_checked = function(value,element,param) { return ($('#signup #checkboxes input[type=checkbox]:checked').length > 0); } 

…如果选中任何复选框,则返回true或false。 我不想逐字逐句地使用上面的方法,因为这需要为每个复选框制定单独的规则,因为我有很多(20+),这对我来说没有多大意义。

我唯一的问题是我不知道如何将它连接到我的validation调用中,因为我在页面上没有“单个”元素来绑定它(因为,我的所有其他validation规则都绑定到特定的单个元素,而我上面的扩展方法 – 实质上 – 与20多个元素相关联)。 以下是我的validation调用现在的样子:

 // validate the form $('#signup').validate({ rules: { 'bedrooms': { required: true }, 'maxrent': { required: true }, 'term': { required: true }, 'movedate': { required: true }, 'firstname': { required: true, minlength: 2 }, 'lastname': { required: true, minlength: 1, maxlength: 1 }, 'email': { required: true, email: true }, 'day_telephone': { required: true, digits: true, minlength: 10, maxlength: 10 } }, errorPlacement: function(error, element) { error.css('display','none'); }, highlight: function(element, errorClass) { $(element).fadeOut(function() { $(element).fadeIn(); }); $('label[for='+$(element).attr('name')+']').css('color','red'); }, unhighlight: function(element, errorClass) { $('label[for='+$(element).attr('name')+']').css('color','black'); }, onkeyup: false }); 

基本上,我希望表单本身检查(使用jQuery Validation Plugin),如果我的扩展方法在提交之前返回true。 我该如何添加?

我不知道您的表格外观以及您希望错误消息的位置,但您是否尝试过添加自定义validation方法?

 $.validator.addMethod("checkboxes", function(value, element) { return $('input[type=checkbox]:checked').length > 0; } 

然后将其添加为只有一个复选框的规则:

 rules: { 'idofacheckbox' : { checkboxes: true } } 

如果选中至少一个复选框,则此复选框将有效,否则无效。

迈克尔克的解决方案挽救了我的生命。

我刚刚将checkbox_1类分配给了我要validation的复选框。 稍微改变addMethod。

 $.validator.addMethod("checkbox_1", function(value, element) { return $('.checkbox_1:checked').length > 0; 

}

要为所有带有类别的复选框分组错误:

 groups: { checkbox_1: "checbox1 checkbox2 checkbox3" 

}

将规则应用于第一个复选框michalek

 rules: { 'idofacheckbox' : { checkbox_1: true } 

}

就是这样。 效果很好,只有一个错误出现在所有被validation的复选框中。

使用jQuery submit()函数来阻止在validation之前发送的forms。

 $('#myform').submit( function(){ // check the checkboxes if (okay_to_submit) forms['myform'].submit(); } ); 
 $.validator.addMethod("checkboxes", function(value, element) { return $('input[type=checkbox]:checked').length > 0; } 

任何使用通用jQuery表达式的代码都不能保证工作。 必须以某种方式使用参数’element’,否则将查询整个页面的任何/所有复选框。

我认为需要逻辑来根据提供的元素识别组中的其他元素。

也许最好的选择是如果’group’属性是动态创建的,然后传递给validator方法。 例如,在输入上使用类,如"atLeastOne-checkboxes group_1" ,validation器回调必须是function(value, element, (Array) elements_in_group) {}

我有一个用例,其中复选框有不同的name attr,没有ID,没有类,我无法改变标记。 我的规则是:

 ... rules: { 'preferred_contact_method[Email]': { checkone: true, }, 'preferred_contact_method[Phone]': { checkone: true, }, 'preferred_contact_method[Mail]': { checkone: true, }, }, ... 

然后我的自定义validation器上升到dom树以找到复选框的包装器,如果有任何选中,则返回。

 $.validator.addMethod('checkone', function(value, element) { const boxes = $(element).closest('.js-webform-checkboxes'); return boxes.find('input:checked').length; }, 'Please select one.'); 

此外,使用groups选项仅显示错误消息一次。