2011-02-08 45 views
3

我有复选框,需要以与单选按钮控件类似的方式进行操作。基本上,当一个人被检查时,所有其他人都需要取消选中。我怎样才能以尽可能少的痛苦实现这一目标?jQuery:禁用除当前选项之外的所有复选框

所以总结一下。如果复选框被选中,则所有其他(同级)必须被取消选中,而点击的一个checkstate不会被触摸。

我已经知道如何取消选中所有复选框,但是如果我这样做了,我必须首先存储选中的复选框的选中状态,然后在取消选中所有复选框后重新应用它。我想知道是否有一些方法可以用一些奇特的jQuery选择器或其他方法来做到这一点。

+0

检查http://stackoverflow.com/questions/2279760/how-to-reset-all-checkboxes-using-jquery-or-javascript – JakeParis 2011-02-08 16:50:51

+0

我知道该怎么做,我真的很想找到比存储原始复选框的状态然后重新应用它更好的方法。 – Chris 2011-02-08 16:51:31

回答

10

通过使用单选按钮。说真的,单选按钮是有原因的。人们希望单选按钮是“1 out of”选项,复选框是“0到n”选择。

总之,这里的代码:

$('input:checkbox').click(function() { 
    $(this).siblings('input:checkbox').removeAttr('checked'); 
}); 

演示:http://jsfiddle.net/ThiefMaster/AVEjt/

但请,只有当你真正需要允许用户取消一切使用它。然后它是可以接受的 - 否则单选按钮要好得多。

+0

我确定他有一个使用它们的合理理由。这实在是一个评论,而不是一个答案。 – 2011-02-08 16:52:35

2

试试这个:

$(':checkbox').not(selector_for_current).attr('checked', false); 

哪里selector_for_current是 “当前”,经常this如果您在回调是。

0

试试这个:

$(function() { 
    $("input[type=checkbox]").click(function(){ 
     $(this).siblings("input[type=checkbox]:not(this)").attr("checked", ""); 
    }); 
}); 

example

0

作为ThiefMaster非常好的答案的替代方案,您可以在父窗体上注册事件,并捕获所有复选框,包括嵌套在字段集(或其他元素)中的所有复选框,这些字段集可能会被“兄弟”错过。

$("#myform").click(function(e) { 
    if ($(e.target).is("input:checkbox")) { 
     $("input:checkbox", this).not(e.target).removeAttr("checked"); 
    } 
}) 

演示:http://jsfiddle.net/Gs3wa/

相关问题