1

我如何使用 Jquery 检查从每个唯一命名的复选框组中至少检查一个选项?这些复选框是动态生成的,并且唯一命名的复选框的总数会有所不同......

<input type="checkbox" class="mcqcb" name="ans_4[]" value="A">
<input type="checkbox" class="mcqcb" name="ans_4[]" value="B">
<input type="checkbox" class="mcqcb" name="ans_4[]" value="C">
<input type="checkbox" class="mcqcb" name="ans_4[]" value="D">

<input type="checkbox" class="mcqcb" name="ans_5[]" value="A">
<input type="checkbox" class="mcqcb" name="ans_5[]" value="B">
<input type="checkbox" class="mcqcb" name="ans_5[]" value="C">
<input type="checkbox" class="mcqcb" name="ans_5[]" value="D">

<input type="checkbox" class="mcqcb" name="ans_17[]" value="A">
<input type="checkbox" class="mcqcb" name="ans_17[]" value="B">
<input type="checkbox" class="mcqcb" name="ans_17[]" value="C">
<input type="checkbox" class="mcqcb" name="ans_17[]" value="D">

到目前为止,我已经尝试过这个:

$('input:checkbox[class=mcqcb][name*="ans_*"]').not(':checked').length
4

3 回答 3

0

<input type="checkbox" class="mcqcb" name="ans_4[]" value="A" checked>

jst把“checked”放在标签的末尾!!

于 2013-01-26T14:00:19.863 回答
0

似乎使用 jQuery 执行此操作的唯一方法是使用数组来存储复选框的分组数据:

JS:

var detectionArry={};
$('.mcqcb').each(function(){
    if (!detectionArry[$(this).attr("name")]){
    detectionArry[$(this).attr("name")]=$(this).prop("checked");
    }
});
for (var i in detectionArry){
    if (!detectionArry[i]){
     alert(i+" is not completed!");   
    }
}

演示| 来源

编辑:
要将其保留在复选框中,只需将选择器 ( $('.mcqcb')) 替换为您提供的选择器:$('input:checkbox[class=mcqcb]')

演示| 来源

于 2013-01-26T14:16:10.483 回答
0

我不确定我是否理解正确。但是,如果您想测试名称属性以 ans 开头的选中复选框的大小,则必须像这样修改选择器:

$('input:checkbox[name*="ans_"]:checked');

如果您想测试是否至少检查了所有这些组中的一个,那很好。但是,如果要测试是否至少检查了每个组中的一个,则必须循环/过滤:

function checkGroup() {
    var finalResult = true; 
        nameArr=[], 
        checkboxGroups = $('input:checkbox[name*="ans_"]');
    checkboxGroups.each(function(){
        var name = $(this).attr("name");
        if($.inArray(name, nameArr) == -1)
            nameArr.push(name);
    });
    // Go through each name attribue and make sure at least one is checked.
    $.each(nameArr, function(index, value){
        if($('[name="' + value + '"]:checked').length === 0){
           finalResult = false; 
        }
    });
    return  finalResult;   
}
于 2013-01-26T14:19:18.447 回答