在jquery中禁用一个类别中所有未选中的复选框

3
当类中的一个复选框被选中时,我希望禁用该类中所有未选中的复选框,所以我尝试了以下代码:
if ((($('input[type=checkbox]:checked.classname)).length)==1) {

    $('.classname').not(':checked').each(function(){
                        $(this).attr('disabled','disabled');
                        });

我也尝试了这个。
    $("input[type=checkbox]."+aclass).not(':checked').attr('disabled',true);

这段代码没有禁用任何复选框,尽管我使用了正确的选择器获取了长度?

你的if条件没有闭合,请检查是打字错误还是解决方案错误。 - Vivek
使用一个大型的JS库重新创建一组单选按钮有什么原因吗? - Sinetheta
@sinetheta。我的第一个解决方案也是这样,但在单选按钮中,一旦选择了其中之一,就无法在不刷新或单击重置按钮的情况下取消选择。但是,对于许多不同类别的组,有严格的要求,而且不能提供重置按钮,这就是为什么我不得不采取这种方法的原因。 - khagesh
2个回答

12

试试这个:

$('.test').change(function(){
    if($('input.test').filter(':checked').length == 1)
        $('input.test:not(:checked)').attr('disabled', 'disabled');
    else
        $('input.test').removeAttr('disabled');
});​

JSFiddle


5

这个主题已经被反复讨论了。共识是使用单选按钮并提供某种“无”选项。这样,您就可以避免在用户持有特定期望的控件中编写新功能。


1
虽然被接受的答案在技术上是正确的,但这确实是最好的答案。 - Aaron Fowler
我一开始使用复选框选择项目列表时,考虑过度了,即使只能选择其中一个....谢谢你提醒我使用“RADIO”选项!简单易行! - Brock Hensley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接