复杂表单中的Jquery验证复选框(至少一个用于组)

复杂表单中的Jquery验证复选框(至少一个用于组),jquery,jquery-validate,Jquery,Jquery Validate,我有一个非常复杂的表单,有X组复选框,如下所示: <div class="checkbox-block1"> <input id="package-1-1" name="member[1][package][19]" type="checkbox" class="checkbox" value="100" style="float: left;"> <input id="package-1-2" name="member[1][package][234]" ty

我有一个非常复杂的表单,有X组复选框,如下所示:

<div class="checkbox-block1">
 <input id="package-1-1" name="member[1][package][19]" type="checkbox" class="checkbox" value="100" style="float: left;">
 <input id="package-1-2" name="member[1][package][234]" type="checkbox" class="checkbox" value="300" style="float: left;">
 <input id="package-1-3" name="member[1][package][254]" type="checkbox" class="checkbox" value="500" style="float: left;">
</div>
<div class="checkbox-block2">
 <input id="package-2-1" name="member[2][package][19]" type="checkbox" class="checkbox" value="100" style="float: left;">
 <input id="package-2-2" name="member[2][package][234]" type="checkbox" class="checkbox" value="300" style="float: left;">
 <input id="package-2-3" name="member[2][package][254]" type="checkbox" class="checkbox" value="500" style="float: left;">
</div>
但当没有选中复选框时,我也得到了“有效形式”

p.S: 用户在以前的表单中选择的块数,则我可以有1、2、3或更多的复选框块

您的代码

rules: {
    'member[1]': {  // <- MUST be the NAME of input element
然后你可以简单地使用
required
规则本身

$(document).ready(function () {
    $("#myform-s3").validate({
        rules: {
            'member[1]': {
                required: true
            }, ....
演示1:


解决方案2 如果无法更改命名,则必须使用
.rules()
方法和“starts with”(
^=
)选择器动态声明规则

不要在
.validate()中声明规则

<div class="checkbox-block1">
    <input id="package-1-1" name="member[1]" type="checkbox" class="checkbox" value="100" style="float: left;">
    <input id="package-1-2" name="member[1]" type="checkbox" class="checkbox" value="300" style="float: left;">
    <input id="package-1-3" name="member[1]" type="checkbox" class="checkbox" value="500" style="float: left;">
</div>
$(document).ready(function () {
    $("#myform-s3").validate({
        rules: {
            // other fields maybe
        ....
.rules()。注意,
需要来自\u组的\u
是的一部分

其中,
1
是该组所需的最小数量,
$(“[id^=“package-1”]”)以该组的所有成员为目标

演示2:

使用此版本,您将获得必须处理的重复消息。由于表单复杂且动态,因此在调用
.validate()
之前,需要动态构造此选项


演示2b:

如果每个组中的所有复选框上都有相同的
名称,则解决方案很简单。在这种情况下,默认情况下,
required
起作用。我的名字不同,显然是成员[x]…的名字。我建议你改为那样做。嗯,我稍后会尝试你的解决方案,现在谢谢,但是我需要用for滚动组来检查复选框的每个块?@natas,没有其他方法了。您可以使
名称
符合
所需
或使用
require\u from\u group
处理重复消息。
$(document).ready(function () {
    $("#myform-s3").validate({
        rules: {
            // other fields maybe
        ....
$('[name^="member[1]"]').each(function() {
    $(this).rules('add', {
        require_from_group: [1, $('[id^="package-1"]')]
    });
});
var names1 = ""; // create empty string
$('[id^="package-1"]').each(function() { // grab each input starting w/ the class
    names1 += $(this).attr('name') + " "; // append each name + single space to string
});
names1 = $.trim(names1); // remove the empty space from the end

$("#myform-s3").validate({
    groups: {
        myGroup: names1 // reference the string
    }, 
    ....