这是官方github参考文档,各种水坑,不好用,这让我想到了当时用 layUI 的1.0版本遇到的各种问题。
上菜:
<div class="am-u-sm-9">
<div class="checkbox-group" id="g_0">
<div class="am-checkbox">
<input id="p_0" type="checkbox" name="par" value="1">
<label for="p_0"> 用户列表</label>
</div>
<div class="am-checkbox">
<div class="am-checkbox">
<label><input data-g="g_0" type="checkbox" name="chi" value="2"> 业务员</label>
</div>
</div>
<div class="am-checkbox">
<div class="am-checkbox">
<label><input data-g="g_0" type="checkbox" name="chi" value="3"> 普通用户</label>
</div>
</div>
</div>
<div class="checkbox-group" id="g_1">
<div class="am-checkbox">
<input id="p_1" type="checkbox" name="par" value="4">
<label for="p_1"> 系统管理</label>
</div>
<div class="am-checkbox">
<div class="am-checkbox">
<label><input data-g="g_1" type="checkbox" name="chi" value="5"> 管理员列表</label>
</div>
</div>
<div class="am-checkbox">
<div class="am-checkbox">
<label><input data-g="g_1" type="checkbox" name="chi" value="6"> 角色列表</label>
</div>
</div>
<div class="am-checkbox">
<div class="am-checkbox">
<label><input data-g="g_1" type="checkbox" name="chi" value="8"> 权限列表</label>
</div>
</div>
</div>
</div>
上面的是动态生成的html
下面js代码
$(function(){
//父级选择框
$('input[name="par"]').change(function(){
if($(this).prop('checked') == true){
$(this).parent().parent().find('input').prop('checked',true);
}else{
$(this).parent().parent().find('input').prop('checked',false);
}
});
//子级选择框
$('input[name="chi"]').change(function(){
var param_a = $(this).attr('data-g');
var param_b = [];
var param_c = [];
var param_d,param_e;
//获取当前父级下面所有子集集合
$('#' + param_a + ' input[name="chi"]').each(function(){
var all = $(this);
param_c.push(all.val());
});
param_d = param_c.length;
//获取当前父级下面选中的子集集合
$('#' + param_a + ' input[name="chi"]:checked').each(function(){
var selected = $(this);
param_b.push(selected.val());
});
param_e = param_b.length;
if(param_d == param_e){
$(this).parent().parent().parent().parent().find('input[name="par"]').prop('checked',true);
}else{
$(this).parent().parent().parent().parent().find('input[name="par"]').prop('checked',false);
}
console.log('selected== '+param_b);
console.log('all== '+param_c);
});
});
重点来了,上面判断逻辑是:判断当前父级下的选中的子集集合长度是否等于当前父级下的子集集合长度。
为什么要判断数组长度而不是直接判断数组呢?
判断数组简单的办法如下,这种方法只能判断英文字母,不能带有数字,动态渲染的html标签属性带有数字
JSON.stringify(param_c) === JSON.stringify(param_b)
有很多的方法可以实现,用最简单的方法来写