如何使用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
答案 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!");
}
}
修改强>
要将其保留在复选框内,只需将选择器($('.mcqcb')
)替换为您提供的选择器:$('input:checkbox[class=mcqcb]')
答案 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;
}