确定是否每个无线电组都选择了一个选项
在启用提交按钮之前,我需要确保已经回答了所有无线电组。 如果我有:
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,或者这是后端代码,那么请继续!