确定是否每个无线电组都选择了一个选项

在启用提交按钮之前,我需要确保已经回答了所有无线电组。 如果我有:

var radioBtns = $('input').filter(':radio'); 

它告诉我我有多少个单选按钮,但我需要知道是否有任何组尚未选择选项。

如果你知道你有多少个团体,你可以做:

 if($('input:radio:checked').length < numGroups){ // At least one group isn't checked } 

否则,您需要先计算组数。 我想不出有什么方法可以更好地做到这一点:

 var rgroups = []; $('input:radio').each(function(index, el){ var i; for(i = 0; i < rgroups.length; i++) if(rgroups[i] == $(el).attr('name')) return true; rgroups.push($(el).attr('name')); } ); rgroups = rgroups.length; if($('input:radio:checked').length < rgroups) alert('You must fill in all the fields.'); else alert('Thanks!'); 

这有效:

 var all_answered = true; $(':radio').each(function(){ if($(':radio[name='+$(this).attr('name')+']:checked').length == 0) { all_answered = false; } }); alert(all_answered); 

工作演示: http : //jsfiddle.net/AlienWebguy/8Cu6d/1/

要获取单选按钮组的计数:

 var prevGroupName = "", currGroupName = "", groupCount = 0; $("input[type='radio']").each(function () { if (prevGroupName == "") { groupCount++; prevGroupName = this.name; } currGroupName = this.name; if (prevGroupName != currGroupName) { groupCount++; prevGroupName = currGroupName; } }); 

要获取已检查单选按钮的数量:

 var radioChecked = $("input[type='radio']:checked").length; 

不是很整洁的方式,但你仍然可以使用它

 $("input:button").click(function(){ var v =$('input[name="a"]').filter(':checked'); var vr =$('input[name="b"]').filter(':checked'); if(v.length==0) { alert("select a group"); }else alert("very good"); if(vr.length==0) { alert(" o come on "); }else alert("guud"); }); 

小提琴

根据这里的答案, 这里和这里 。 检查类并允许选择来自同一组的多个项目。

 function check_all_groups () { var counter = 0 $('.btn-group').each(function () { $(this).children('.atleastone').each(function () { if ($(this).hasClass('active')) { counter += 1 return false } }); }); if (counter == $('.btn-group').length) { return true } }; 

我有理论上的解决方案,建立了Paulpro上面的答案,它使用Set uniqueness属性来过滤JQuery中的元素名称列表:

 var radioNames = new Set(Array.from($('input:radio').map(function() { return this.name } ))); var inputGroupCount = radioNames.length; if( $('input:radio:checked').length < inputGroupCount){ // At least one group isn't checked } 

这使用map()函数从无线电组中提取name属性。 然后将其转换为Array ,该Array用作Set的构造函数参数。

不幸的是 ,截至2016年4月,IE中不支持Set(iterable)Array.from() ; Opera和Safari的支持有限。

如果您可以确保您的用户使用Chrome或Firefox,或者这是后端代码,那么请继续!