【问题标题】:jquery checkbox show hide div not workingjquery复选框显示隐藏div不起作用
【发布时间】:2016-01-24 08:49:41
【问题描述】:

我正在尝试使用 jQuery 显示/隐藏来根据是否选中复选框来控制 div 的显示。 (我也尝试过使用 display none/block 的 CSS 方法。)

我可以让代码通过检查复选框然后让 div 显示或隐藏来工作,但是,如果选中特定的复选框,我无法让我的“检查所有”按钮也起作用,以显示/相应地隐藏 div。

我在这里把它放到一个 JSFiddle 中:https://jsfiddle.net/gamehendgeVA/2jszhdzw/

有人可以帮我让选中的单个复选框显示/隐藏与“全选”按钮一起显示和隐藏基于被选中的特定复选框的 div 吗?

感谢您的帮助!

HTML

<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title">Search These Domains</h3></div>
<div class="panel-body">
<input type="button" class="btn btn-primary btn-xs" data-toggle="button" value="all domains" id="checkAllDomains" />
<br />
<div class="col-md-6">
<div class="checkbox"><label><input type="checkbox" class="searchDomainCheckbox" id="domainCheckbox1">One</label></div>
<div class="checkbox"><label><input type="checkbox" class="searchDomainCheckbox">Two</label></div>
<div class="checkbox"><label><input type="checkbox" class="searchDomainCheckbox">Three</label></div>
</div>
<div class="col-md-6">
<div class="checkbox"><label><input type="checkbox" class="searchDomainCheckbox">Four</label></div>
<div class="checkbox"><label><input type="checkbox" class="searchDomainCheckbox">Five</label></div>
<div class="checkbox"><label><input type="checkbox" class="searchDomainCheckbox">Six</label></div>
</div>
</div> <!-- /.panel-body -->
</div> <!-- /.panel -->
<div class="panel panel-info" id="div1">
<div class="panel-heading"><h3 class="panel-title">Search These Divisions</h3></div>
<div class="panel-body">
THIS DIV SHOULD ONLY APPEAR WHEN "#domainCheckbox1" is checked, either when checked on its own, or checked when the "all domains" button checks it.
</div> <!-- /.panel-body -->
</div> <!-- /.panel -->

JS

$('#div1').hide();
$('#domainCheckbox1').change(function(){
  if($(this).prop("checked")) {
    $('#div1').show();
  } else {
    $('#div1').hide();
   }
});
/////////
$(function() {
    function updateCheckAllButtonDomains() {
        if ($('.searchDomainCheckbox:checked').length == $('.searchDomainCheckbox').length) {
        $('#checkAllDomains').val('uncheck all').data('check', false);
    } else {
        $('#checkAllDomains').val('all domains').data('check', true);
    }       
}
$('.searchDomainCheckbox').change(function() {
    updateCheckAllButtonDomains();
});
$('#checkAllDomains').click(function() {
    $('.searchDomainCheckbox').prop('checked', $(this).data('check'));
    updateCheckAllButtonDomains();
});
updateCheckAllButtonDomains();
});

【问题讨论】:

    标签: jquery twitter-bootstrap-3 show show-hide


    【解决方案1】:

    发生这种情况是因为 searchDomainCheckbox 事件已附加到元素。所以,你必须手动触发,像这样:$('.searchDomainCheckbox').trigger('change');

    将此代码放在#checkAllDomains 的事件点击上,然后开心!

    这是我的解决方案:

    $('#checkAllDomains').click(function() {
        $('.searchDomainCheckbox').prop('checked', $(this).data('check'));
        $('.searchDomainCheckbox').trigger('change');
        updateCheckAllButtonDomains();
    });
    

    注意:将触发器放在 updateCheckAllButtonDomains() 中会导致“超出最大调用堆栈大小”

    【讨论】:

    • 非常感谢...上面的 Diptox 完全在正确的轨道上,但是我遇到了一些奇怪的问题,并非所有内容都始终显示...您的代码(触发器更改的位置)确实完美的技巧,我的表格现在看起来很稳定......非常感谢你帮助我...... :-)
    【解决方案2】:

    这里是jsFiddle

    HTML

    <div class="panel panel-info">
    <div class="panel-heading">
        <h3 class="panel-title">Search These Domains</h3>
    </div>
    <div class="panel-body">
        <input type="checkbox" id="checkAllDomains" />
        <label>Check All</label>
        <br />
        <div class="col-md-6">
            <div class="checkbox">
                <label>
                    <input type="checkbox" class="searchDomainCheckbox">One</label>
            </div>
            <div class="checkbox">
                <label>
                    <input type="checkbox" class="searchDomainCheckbox">Two</label>
            </div>
            <div class="checkbox">
                <label>
                    <input type="checkbox" class="searchDomainCheckbox">Three</label>
            </div>
        </div>
        <div class="col-md-6">
            <div class="checkbox">
                <label>
                    <input type="checkbox" class="searchDomainCheckbox">Four</label>
            </div>
            <div class="checkbox">
                <label>
                    <input type="checkbox" class="searchDomainCheckbox">Five</label>
            </div>
            <div class="checkbox">
                <label>
                    <input type="checkbox" class="searchDomainCheckbox">Six</label>
            </div>
        </div>
    </div>
    <!-- /.panel-body -->
    

    JAVASCRIPT

    $('#checkAllDomains').click(function (event) {
        if (this.checked) {
            $('.searchDomainCheckbox').each(function () {
                this.checked = true;
            });
        } else {
            $('.searchDomainCheckbox').each(function () {
                this.checked = false;
            });
        }
    });
    

    【讨论】:

      【解决方案3】:

      Demo

      只需触发 Change 事件,它应该可以工作

      function updateCheckAllButtonDomains() 
      {
          if ($('.searchDomainCheckbox:checked').length == $('.searchDomainCheckbox').length)
              $('#checkAllDomains').val('uncheck all').data('check', false);
          else 
              $('#checkAllDomains').val('all domains').data('check', true);
      
          $("input.searchDomainCheckbox").trigger("change");
      }
      

      【讨论】:

      • 非常感谢,工作就像一个魅力......(一点点注意,你的代码在 else } 之前有“更改”行,一旦我像你的小提琴一样移动它,工作太好了...非常感谢,我不知道那个事件,现在将阅读它:-)
      • :D 触发器应该在 if 和 else 之后,如果都被检查了就会触发
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2015-10-10
      • 2021-09-07
      • 1970-01-01
      相关资源
      最近更新 更多