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

nee*_*zer 4 validation jquery

我有一个包含许多复选框的表单(使用自己的规则有太多意义),我需要使用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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

// 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
});
Run Code Online (Sandbox Code Playgroud)

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

小智 9

我不知道您的公式如何以及您希望错误消息的位置,但您是否尝试过添加自定义验证方法?

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

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

rules: {
    'idofacheckbox' : { checkboxes: true }
}
Run Code Online (Sandbox Code Playgroud)

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