首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用动态父和子复选框发出

使用动态父和子复选框发出
EN

Stack Overflow用户
提问于 2016-04-04 19:12:52
回答 1查看 233关注 0票数 0

这是现场演示

问题:复选框不是以一种动态的方式工作的,而且多个div在这里应该是动态的,在这个例子中有5。

代码语言:javascript
复制
<script src="https://code.jquery.com/jquery-2.2.1.js"></script>

<div>
  <input type="checkbox" class="parentCheckBox" /> Parent 1  <a onclick="document.getElementById('div_1').style.display='';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/plus_add_green.png" height="20" width="20"></a>  <a onclick="document.getElementById('div_1').style.display='none';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/minus_remove_green.png" height="20" width="20"></a><br />
  <div id="div_1" style="display:none;">
    <ul>
    <li><input type="checkbox" class="childCheckBox" />Child 1-1 </li>
    <li><input type="checkbox" class="childCheckBox" />Child 1-2 </li>
    <li><input type="checkbox" class="childCheckBox" />Child 1-3 </li>
    </ul>    
  </div>
</div>

<div>
  <input type="checkbox" class="parentCheckBox" /> Parent 2  <a onclick="document.getElementById('div_2').style.display='';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/plus_add_green.png" height="20" width="20"></a>  <a onclick="document.getElementById('div_2').style.display='none';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/minus_remove_green.png" height="20" width="20"></a><br />
  <div id="div_2" style="display:none;">
    <ul>
    <li><input type="checkbox" class="childCheckBox" />Child 2-1 </li>
    <li><input type="checkbox" class="childCheckBox" />Child 2-2 </li>
    <li><input type="checkbox" class="childCheckBox" />Child 2-3 </li> 
    </ul>
  </div>    
</div>

<div>
  <input type="checkbox" class="parentCheckBox" /> Parent 3  <a onclick="document.getElementById('div_3').style.display='';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/plus_add_green.png" height="20" width="20"></a>  <a onclick="document.getElementById('div_3').style.display='none';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/minus_remove_green.png" height="20" width="20"></a><br />
  <div id="div_3" style="display:none;">
    <ul>
    <li><input type="checkbox" class="childCheckBox" />Child 3-1 </li>
    <li><input type="checkbox" class="childCheckBox" />Child 3-2 </li>
    <li><input type="checkbox" class="childCheckBox" />Child 3-3 </li>
    </ul>
  </div>    
</div>

<div>
  <input type="checkbox" class="parentCheckBox" /> Parent 4  <a onclick="document.getElementById('div_4').style.display='';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/plus_add_green.png" height="20" width="20"></a>  <a onclick="document.getElementById('div_4').style.display='none';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/minus_remove_green.png" height="20" width="20"></a><br />
<div id="div_4" style="display:none;">
 <ul>
    <li><input type="checkbox" class="childCheckBox" />Child 4-1 </li>
    <li><input type="checkbox" class="childCheckBox" />Child 4-2 </li>
    <li><input type="checkbox" class="childCheckBox" />Child 4-3 </li>
    </ul>
 </div>    

试过这个:

代码语言:javascript
复制
$(document).ready(
function() {
    //clicking the parent checkbox should check or uncheck all child checkboxes
    $(".parentCheckBox").click(
        function() {
            $(this).parents('div:eq(0)').find('.childCheckBox').attr('checked', this.checked);
        }
    );
    //clicking the last unchecked or checked checkbox should check or uncheck the parent checkbox
    $('.childCheckBox').click(
        function() {
            if ($(this).parents('div:eq(0)').find('.parentCheckBox').attr('checked') == true && this.checked == false)
                $(this).parents('div:eq(0)').find('.parentCheckBox').attr('checked', false);
            if (this.checked == true) {
                var flag = true;
                $(this).parents('div:eq(0)').find('.childCheckBox').each(
                    function() {
                        if (this.checked == false)
                            flag = false;
                    }
                );
                $(this).parents('div:eq(0)').find('.parentCheckBox').attr('checked', flag);
            }
        }
      );
    }
 );
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 19:28:52

试试这个:

代码语言:javascript
复制
$(document).on('change', '.parentCheckBox', function() {
    var that = $(this);
  that.closest('div').find('.childCheckBox').prop('checked', that.is(':checked'));
});

$(document).on('change', '.childCheckBox', function() {
    var that = $(this);
  var par = that.closest('ul');
  var c = par.find('.childCheckBox').filter(':checked').length;
  var parChk = par.closest('div').parent().find('.parentCheckBox');
  var checked = c > 0;
  parChk.prop('checked', checked);
  console.log(checked);
});

检查演示

编辑

如果理解正确,则只在选中所有子元素时才选中父复选框。要实现这一行为,只需更改以下一行:

代码语言:javascript
复制
var checked = c > 0; 

代码语言:javascript
复制
var checked = c == par.find('.childCheckBox').length;

更新的演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36410967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档