如何检查是否选中了所有唯一命名复选框中的至少一个选项?

时间:2013-01-26 13:52:39

标签: jquery html validation input checkbox

如何使用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

3 个答案:

答案 0 :(得分:0)

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

jst在标签结尾处“检查”!!

答案 1 :(得分: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!");   
    }
}

Demo | Source

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

Demo | Source

答案 2 :(得分:0)

我不确定我是否理解你。但是如果你想测试name属性以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;   
}