选择全部/无复选框但不影响单选按钮?

时间:2011-02-13 19:00:13

标签: jquery

Rails 2.3.5,到目前为止只在本项目中使用Prototype。

我有一个带有复选框和单选按钮的表单。我一直在尝试几个脚本试图找到一种方法来为复选框提供“全选”/“选择无”功能,其中单选按钮不受影响。即使是专门包含复选框ID的脚本,仍会导致单选按钮切换。

与此问题的最佳答案(基于原型)类似: Select all checkboxes

即使该函数采用复选框的id,它也会影响表单中的单选按钮(最后一个单选按钮最终会被选中)。

我试过的几个脚本都是按复选框的名称,但在我的情况下,它们的名称是 name =“selected_contacts []”表示数组,我无法想象如何让Javascript加入函数中带括号的名称。

到目前为止,我还没有任何运气。是否可以切换复选框,而不影响同一表格中的单选按钮?

谢谢!

3 个答案:

答案 0 :(得分:4)

使用jQuery你可以这样做......

$("[type='checkbox']","#containerId").each(function(){ this.checked = true });

它总是对我有用。

答案 1 :(得分:2)

虽然@Ice83's answer可行,但使用其他形式的选择器会更简洁一些:

$('form').find('input:selector').each(
    function() {
        $(this).attr('checked',true);
    });

这是因为,无论如何,内部(当然是jQuery 1.4.4)使用选择器的上下文会导致jQuery到call find() internally。显然,如果您没有使用经典的form元素,请更改$('form')以表示您包含复选框的元素。

input:checkbox selector只是更简洁一点。

值得注意的是,这些都是最佳 - 最优化。

<小时/> 已编辑,参考@Po'Lazarus'评论:

each()方法确实是多余的。以下内容同样适用(但我没有基准测试它是否会更快):

$('form').find('input:checkbox').attr('checked',true);

它可能更快,我只是没有费心去验证它。


已编辑(再次)现在我已正确阅读了该问题:

以下内容允许您选择/取消选择所有选项:

$('#selectAll').change(
    function(){
        if ($(this).is(':checked')) {
            $('#options').find('input:checkbox').attr('checked',true);  
        }
        else {
            $('#options').find('input:checkbox').removeAttr('checked');  
        }
    });

Simple JS Fiddle demo

答案 2 :(得分:0)

这是一种方法,它将切换控件的整体状态存储为该控件本身的数据:

$('#your_toggle_control').click( function(e){
  e.preventDefault();
  // what is the overall toggle state?
  var thisState = $(this).data('boxes-checked');
  if( thisState == undefined ){
    $(this).data('boxes-checked',true); // first time, set initial state on
  }
  $('#yourform').find(':checkbox').attr('checked', thisState); // check/uncheck
  $(this).data('boxes-checked', !thisState); // toggle state of the control
});