Jquery 如何检查在一组具有不同名称值的复选框中是否至少选中了一个复选框

Jquery 如何检查在一组具有不同名称值的复选框中是否至少选中了一个复选框,jquery,html,validation,checkbox,Jquery,Html,Validation,Checkbox,我有一个问题,我已经寻找了一段时间的答案,现在无法让它工作 我正在寻找一种方法来检查是否选中了一组复选框中的至少一个复选框。让我如此困难的是,这些输入中的每一个都有不同的名称值。我只找到了jQuery验证插件等的答案。以下是我的html: <tr class="formField-checkbox formFieldRequired"> <td class="formLabelHolder"><label for="field129">Group of c

我有一个问题,我已经寻找了一段时间的答案,现在无法让它工作

我正在寻找一种方法来检查是否选中了一组复选框中的至少一个复选框。让我如此困难的是,这些输入中的每一个都有不同的名称值。我只找到了jQuery验证插件等的答案。以下是我的html:

<tr class="formField-checkbox formFieldRequired">
  <td class="formLabelHolder"><label for="field129">Group of checkboxes</label></td>
  <td class="formFieldHolder">
    <input type="checkbox" name="field129[0]" class="formCheckbox required" value="Something1"> 
    <label><span class="formCheckboxLabel">Something1</span></label>
    <input type="checkbox" name="field129[1]" class="formCheckbox required" value="Something2"> 
    <label><span class="formCheckboxLabel">Something2</span></label>
    <input type="checkbox" name="field129[2]" class="formCheckbox required" value="Something3"> 
    <label><span class="formCheckboxLabel">Something3</span></label>
  </td>
</tr>

复选框组
有些事
什么
有些事
以下是我现在拥有的jQuery:

// Validate all checkboxes
var named = [];
var $requiredCheck = $(this).find('input[type="checkbox"].required');

$($requiredCheck,$formId).each(function() {
  // Creates an array with the names of all the different checkbox group.
  named[$(this).attr('name')] = true;
});

// Goes through all the names and make sure there's at least one checked.
for (name in named) {
  var $checkboxes = $("input[name='" + name + "']");
  if ($checkboxes.filter(':checked').length == 0) {
    $checkboxes.closest('.formFieldHolder').addClass('error').append('<span   class="error">Required!</span>');
  } 
}
//验证所有复选框
var name=[];
var$requiredCheck=$(this.find('input[type=“checkbox”].required');
$($requiredCheck,$formId){
//使用所有不同复选框组的名称创建一个数组。
命名为[$(this).attr('name')]=true;
});
//检查所有的名字,确保至少有一个被选中。
for(命名中的名称){
var$复选框=$(“输入[名称='”+名称+“]”);
if($checkbox.filter(':checked')。长度==0){
$checkbox.closest('.formFieldHolder').addClass('error').append('Required!');
} 
}
由于复选框具有不同的名称值,因此目前显然无法完美地工作。现在,append打印出与复选框数量相同的错误消息。例如,如果有五个复选框,并且选中了一个复选框,它仍然会给出四次错误消息。我已经试着自己解决这个问题很久了,但就是做不好。我不能更改这些复选框的名称值,也不能简单地对html做任何事情。我认为可以这样做的一种方法是删除名称中最后的[0]、[1]和[2]部分,但我没有找到一种方法让它工作

我认为简单的jQuery验证方法将失败,因为在一个表单中可能有更多的复选框组。下一组复选框的名称值为name=“field130[0]”、name=“field130[1]”和name=“field130[2]”。希望你能理解我的意思

任何帮助都将不胜感激

编辑:


添加了一个描述,即在一个表单中可能有多组复选框

您这样做太复杂了:)

请参见上的第一个示例

回应您的评论

如果页面上有多个表单,可以将表单指定为容器:

if ($('#form1_id').find('.required:checked').length) {...
测试多个表单

为每个表单指定类
可测试表单

$('.testable_form').each(function() {
    if ($(this).find('.required:checked').length) {
        [do something - set a flag, add a class...]
    }
});

我一直很好奇为什么人们用
>0
来质疑int是否真实。似乎没有必要。否则+1@popnoodles是的,打得好。我想是因为它更清晰,更易于维护。我这么做是因为jQuery网站上就是这么做的。不确定我在实践中是否会这样做:)如果有第二组相同形式的单独复选框,则只需要在任一组复选框中选中其中一个复选框,这样做不是吗?谢谢你的帮助,尼克,很抱歉,我没有很好地澄清这个问题!:)不幸的是,即使是对我的评论的回应也没有解决我的问题。我在一个表单中有多个复选框组,每个组都应该分别进行验证,这就是为什么。但是谢谢你的努力,我感谢你的帮助。
$('.testable_form').each(function() {
    if ($(this).find('.required:checked').length) {
        [do something - set a flag, add a class...]
    }
});