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

时间:2011-07-22 22:44:38

标签: jquery

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

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

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

6 个答案:

答案 0 :(得分:9)

如果你知道你有多少个小组,你可以这样做:

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!');

答案 1 :(得分:5)

这有效:

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/

答案 2 :(得分:2)

获取单选按钮组的计数:

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;

答案 3 :(得分:1)

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

$("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");

    });

FIDDLE

答案 4 :(得分:1)

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

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
    }
};

答案 5 :(得分:1)

我在上面使用Set的唯一性属性来解释JQuery中的元素名称列表时,我的理论*解决方案构建了Paulpro的答案:

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属性。然后是converted to an Array,它被用作Set的构造函数参数。

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

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