【问题标题】:check all checkbox with hide选中所有复选框并隐藏
【发布时间】:2013-04-27 16:56:58
【问题描述】:

如何添加一个复选框,如果选中则可以选中所有复选框?

如何将显示/隐藏功能添加到“全选”复选框。 如果选中所有复选框,则还需要显示提交按钮。

$(document).ready(function() {

var $submit = $("#submit_prog").hide(),
    $cbs = $('input[name="prog"]').click(function() {
        $submit.toggle( $cbs.is(":checked") );
    });

});

<input type="checkbox" name="?" value="?">  // check all checkbox

<input type="checkbox" name="prog" value="1">
<input type="checkbox" name="prog" value="2">

<input type="submit" id="submit_prog" value='Submit' />

【问题讨论】:

标签: javascript jquery html


【解决方案1】:
  1. 假设选择所有 chckbox 的 id 为 selall。
  2. 使用全选为要选择的所有复选框创建一个类
$('#selall').click(function(event) {   
    if(this.checked) {
        // Iterate each checkbox
        $('.yourchckbox').each(function() {
            this.checked = true;                        
        });
        $('#submit_prog').show();
    }
    else { 
    $('.yourchckbox').each(function() 
    { this.checked = false; }); 
    $('#submit_prog').hide()
    }
});
  $('.yourchckbox').click(function(event) { 
   if(!(this.checked)) {
   $('#selall').prop('checked', false);   
   }

  });

【讨论】:

  • 提交按钮呢?当我选中所有复选框时,它仍然隐藏。
  • 编辑了我的答案。抱歉在阅读问题时错过了提交部分。
  • 现在可以了。能否请您添加一个功能,如果我至少取消选中其中一个复选框值,则选中所有复选框将被取消选中。谢谢。
  • 当我取消选中其中一个复选框时,“全选”未被选中。
【解决方案2】:

给全选复选框一个ID,然后说selectall

$('#selectall').click(function(){
    if (this.checked){
        $('input[name="prog"]').prop('checked', true);
        $submit.toggle( true );
    }
});

如果您希望在未选中全选的情况下取消选中复选框

$('#selectall').click(function(){
    $('input[name="prog"]').prop('checked', this.checked);
    $submit.toggle( this.checked);
});
$cbs = $('input[name="prog"]').click(function() {
    $submit.toggle( $cbs.filter(':checked').length == 0 );
    if (!this.checked) $('#selectall').prop('checked', false);
});

【讨论】:

  • 但是你也可以手动点击name="prog",然后$submit可见性就会出错。
  • 所以有一个选项,没有复选框是:checked,你会看到$submit。这是一个错误。
  • 如果选中所有复选框,如果我至少取消选中一个复选框,我需要取消选中它
【解决方案3】:

试试

$('input:checkbox[name!="prog"]').click(function(){
     $('input:checkbox[name="prog"]').prop('checked', $(this).is(':checked'))
})

或者如果您可以将复选框 id 更改为 selall

$('#selall').click(function(){
     $('input:checkbox').prop('checked', $(this).is(':checked'))
})

【讨论】:

  • 提交按钮仍然隐藏
【解决方案4】:

其实很简单。

让我们将此复选框命名为&lt;input type="checkbox" name="check_all" value="1"&gt;

现在添加事件:

$('input[name="check_all"]').click( function() {
    if( $(this).is(':checked') ) {
        $('input[name="prog"]').attr('checked', 'checked');
    } else {
        $('input[name="prog"]').removeAttr('checked');
    }

    $('input[name="prog"]:eq(0)').change(); //firing event which we will catch
});

然后我们应该检查是否所有input[name="prog"]都被检查:

$('input[name="prog"]').change( function() {
    if( $('input[name="prog"]:not(:checked)').length ) {
        $('#submit_prog').hide();
    } else {
        $('#submit_prog').show();
    }
});

【讨论】:

  • 使用属性而不是属性来操作复选框状态
【解决方案5】:

选中 #all 上的所有复选框并在选中所有复选框时选中 #all

 <SCRIPT language="javascript">
    $(function(){

        $("#all").click(function () {
              $('.one').attr('checked', this.checked);
     if (this.checked) {$('#submit_prog').hide();}
(this.checked)?$('#submit_prog').show():$('#submit_prog').hide();
        });

        $(".one").click(function(){

            if($(".one").length == $(".one:checked").length) {
                $("#all").attr("checked", "checked");
                $('#submit_prog').show();
            } else {
                $("#all").removeAttr("checked");
$('#submit_prog').hide();
            }

        });
    });
    </SCRIPT>

更改复选框的 id 和类别

<input type="checkbox" id="all" >  // check all checkbox

<input type="checkbox" name="prog" class="one" value="1">
<input type="checkbox" name="prog" class="one" value="2">

【讨论】:

  • 检查所有只工作一次,提交按钮仍然隐藏。
  • 使用属性而不是属性来操作复选框状态
  • 嗯仍然只勾选所有复选框一次。但是显示/隐藏功能可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多