【问题标题】:How can i correct this jquery / js checkbox code我怎样才能更正这个 jquery / js 复选框代码
【发布时间】:2015-01-09 15:26:04
【问题描述】:

我一直很难弄清楚这些代码。

复选框代码功能如下:

有一个全局复选框(全选)和子(单个)复选框。如果选中(全局)复选框,则所有(子)复选框也将被选中,将显示一个 div,如果未选中全局,则取消选中(子)复选框并且 div 将隐藏(jquery hide并展示)。将显示选中复选框的编号。

这就是问题所在;如果子复选框未选中,则全局复选框仍处于选中状态,如果选中所有子复选框,则全局复选框也应立即选中。

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">    </script>
 <div id="mydiv" style="display:none;">RESTORE | DELETE
 <span>Checked: </span>
 <span id="counter"></span>
 </div>
<input type="checkbox" id="global">
<br>
<input type="checkbox" class="child">
<input type="checkbox" class="child">
<input type="checkbox" class="child">
<input type="checkbox" class="child">
<input type="checkbox" class="child">
<input type="checkbox" class="child">
<input type="checkbox" class="child">

    $(document).ready(function() {
  $('#global').click(function() {
    $('.child').prop('checked', $(this).is(':checked'));

    if ($(this).is(':checked'))
      $('#mydiv').show();
    else
      $('#mydiv').hide();

    count();
  });

  $('.child').change(function() {
    var checkedLength = $('.child:checked').length;
    if (checkedLength > 0)
      $('#mydiv').show();
    else
      $('#mydiv').hide();
    count();
  });
});

var count = function() {
   var i = $('input.child:checked').length;
   $('#counter').html(i);
}

感谢所有支持。 提前致谢。

【问题讨论】:

  • 这属于 codereview.stackexchange.com
  • 这段代码有什么问题?
  • @DanielA.White 标题的意思是,我怎样才能改进这段代码,让它像我想要的那样工作。有问题。
  • @Daniel @ Rory McCrossan @ Hacketo 抱歉我发布它的方式,我的意思是,我如何纠正上面解释的全局和子复选框的错误
  • 您可以更改问题的标题吗?这是误导。

标签: javascript jquery html checkbox


【解决方案1】:

将 #global 更改为 .global

这应该可行。只需要一个事件。

$(document).ready(function() {
  var child = $('.child');
  var global = $('.global');

  $('input').on("change", function() {
    //check if checkbox is the global one
    if($(this).hasClass("global")) {
      //if yes, then set all childs to checked true, if not, then to false
      ($(this).prop('checked')) ? child.prop('checked', true) : child.prop('checked', false);
    } else {
      var oneChecked = false;
      //every change on a checkbox go though all childboxes an check if on of them is checked
      child.each(function() {
        if($(this).prop('checked') == true) {
          oneChecked = true;
        }
      });
      //if one was checked global has to be checked, if no one was checked it has to be false
      (oneChecked) ? global.prop('checked', true) : global.prop('checked', false);
    } 
  });
});

【讨论】:

    【解决方案2】:

    $(document).ready(function() {
      var div = $('#mydiv'),
          global = $('#global'),
          childchecks = $(':checkbox.child');
    
      global.on('change', function() {
        childchecks.prop('checked', this.checked);
        var how = this.checked ? 'show' : 'hide';
        div[how]();
      });
    
      childchecks.on('change', function() {
        global.prop('checked', childchecks.length === childchecks.filter(':checked').length );
        var how = childchecks.length === childchecks.filter(':checked').length ? 'show' : 'hide';
        div[how]();
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">    </script>
     <div id="mydiv" style="display:none;">RESTORE | DELETE
     <span>Checked: </span>
     <span id="counter"></span>
     </div>
    <input type="checkbox" id="global">
    <br>
    <input type="checkbox" class="child">
    <input type="checkbox" class="child">
    <input type="checkbox" class="child">
    <input type="checkbox" class="child">
    <input type="checkbox" class="child">
    <input type="checkbox" class="child">
    <input type="checkbox" class="child">

    【讨论】:

    • 单击代码片段Ctrl-M图标...它是第二组图标中的最后一个图标。
    • 取消选中全局时不取消选中子项吗?
    • 这个 'childchecks.prop('checked', true);'应该类似于 'childchecks.prop('checked', this.checked);'
    • 好消息@gratz。现在应该修好了。
    • @SowemimoBamidele,当前版本有什么问题? 还没有工作是什么意思?
    【解决方案3】:

    试试:

    $(document).ready( function(){
        $('#global').change( function(){
            var bIsChecked = $(this).is(':checked');
            $('.child').prop('checked', bIsChecked );
            $('#mydiv')[ bIsChecked ? 'show' : 'hide' ]();
            count();
        });
    
        $('.child').change( function(){
            var n = count();
            $('#mydiv')[ n>0 ? 'show' : 'hide' ]();
            $('#global')[0].checked = n==$('.child').length ;
        });
    });
    
    var count =function(){
       var n = $('.child:checked').length;
       $('#counter').html( n );
       return n
    }
    

    【讨论】:

    • 请再提出一个请求.... 我想在同一页面上重新使用代码,但无法正常工作。该项目就像一个(标签式邮件用户界面)。我使用了收件箱上方的代码,因此我更改了所有参数并重新用于发件箱但无法正常工作。我该怎么做
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多