js实现复选框选中父级元素子级元素也选中,没有子级元素选中父级也不选中的效果

HTML

<tr>
<td>
<label>
<input name="rules[]" value="15" checked="checked" dataid="id-15" class="inverted checkbox-parent " type="checkbox">
<span style="font-weight:bold; font-size:14px;" class="text">管理员</span>
</label>
</td>
<tr>
<td>
<label>&nbsp;&nbsp;&nbsp;
<input name="rules[]" value="16" checked="checked" dataid="id-15-16" class="inverted checkbox-parent checkbox-child " type="checkbox">
<span class="text">管理员列表</span>
</label>
</td>
</tr>
</tr>
<tr>
<td>
<label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="rules[]" value="19" checked="checked" dataid="id-15-16-19" class="inverted checkbox-parent checkbox-child " type="checkbox">
<span class="text">管理员修改</span>
</label>
</td>
</tr>
<tr>
<td>
<label>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="rules[]" value="18" checked="checked" dataid="id-15-16-18" class="inverted checkbox-parent checkbox-child " type="checkbox">
<span class="text">管理员删除</span>
</label>
</td>
</tr>
<tr>
<td>
<label>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="rules[]" value="17" checked="checked" dataid="id-15-16-17" class="inverted checkbox-parent checkbox-child " type="checkbox">
<span class="text">管理员添加</span>
</label>
</td>
</tr>

JS代码

<script type="text/javascript">
/* 权限配置 */
$(function() {
//动态选择框,上下级选中状态变化
//选中父级,所有子级也选中
$('input.checkbox-parent').on('change', function() {
//动态选择框,上下级选中状态变化
var dataid = $(this).attr("dataid");
console.log(dataid);
$('input[dataid^=' + dataid + ']').prop('checked', $(this).is(':checked'));
//[dataid^=value]匹配指定属性以value开始的input元素,和正则^以xx开始相似
//prop()函数用于设置或返回当前jQuery对象所匹配的元素的属性值。
//is() 根据选择器、元素或 jQuery 对象来检测匹配元素集合,如果这些元素中至少有一个元素匹配给定的参数,则返回 true。
}); //子级选择状态
$('input.checkbox-child').on('change', function() {
//获取子元素的dataid值
var dataid = $(this).attr("dataid");
//截取子元素的dataid值以最后一个“-”为终
dataid = dataid.substring(0, dataid.lastIndexOf("-"));
var parent = $('input[dataid=' + dataid + ']');
if($(this).is(':checked')) {
parent.prop('checked', true);
//循环到顶级
while(dataid.lastIndexOf("-") != 2) {
dataid = dataid.substring(0, dataid.lastIndexOf("-"));
parent = $('input[dataid=' + dataid + ']');
parent.prop('checked', true);
}
} else {
//没子元素勾选,父级也取消勾选
//父级
if($('input[dataid^=' + dataid + '-]:checked').length == 0) {
parent.prop('checked', false);
//循环到顶级
while(dataid.lastIndexOf("-") != 2) {
dataid = dataid.substring(0, dataid.lastIndexOf("-"));
parent = $('input[dataid=' + dataid + ']');
if($('input[dataid^=' + dataid + '-]:checked').length == 0) {
parent.prop('checked', false);
}
}
}
}
});
});
</script>

js input复选框选中父级同时子级也选中的更多相关文章

  1. html+css+js实现复选框全选与反选

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  2. js实现复选框的全选、全不选和反选

    js实现复选框的全选.全不选和反选 主要是用遍历的方法查找元素,然后通过改变checked的属性来选择,为true则是选中状态,为false则是未选状态 实现代码 <!DOCTYPE html& ...

  3. js操作复选框 复选框

    //复选框点击事件 function checkAll(){ let tp=$("#tp").val(); let all=$("input[name='id']&quo ...

  4. js操作复选框

    js操作复选框 JavaScript 代码: //复选框全选 $(function () { $("#select_all").click(function () { $(&quo ...

  5. js实现复选框全选/全不选/反选

    js实现复选框全选/全不选/反选 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  6. 复选框全选、反选及根据值JS控制复选框默认选中事件

    HTML代码 <div class="col-sm-7"> <input type="checkbox" id="allAndNot ...

  7. js实现复选框的全选、全不选、反选

    js中实现复选框的全选,全不选以及反选,分为两种情况: (1)选中“请选择”前面的复选框实现全选,不选中“请选择”前面的复选框实现全不选 <!DOCTYPE html PUBLIC " ...

  8. js 判断 复选框全选、全不选、反选、必选一个

    一个挺 使用的 js 代码片段,  判断  复选框全选.全不选.反选.必选一个 记录下, 搬来的 思路: 修改数据的 选中与否状态, 拿到所有的输入框,看是否有选中的状态 <html> & ...

  9. jQuery获取input复选框的值

    var ipResolveValue =[]; //定义一个空数组$("input[name='ipResolve']:checked").each(function(){   / ...

随机推荐

  1. Struts2框架01【如果使用struts框架】【利用struts框架写一个 hello world】

    1 什么是Struts2框架 基于MVC设计模式的web应用框架 Struts2框架是一个轻量级的MVC流程框架 轻量级是指程序的代码不是很多,运行时占用的资源不是很多,MVC流程框架就是说它是支持分 ...

  2. 使用批处理替换windows系统中的hosts文件

    chcp 936 >nul@echo offmode con lines=30 cols=60%1 mshta vbscript:CreateObject("Shell.Applica ...

  3. vue 之 let 和const

    浏览目录 let const let es6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. 上面代码在代码块之中,分别用let和var声明了 ...

  4. Swing窗口Linux下不支持最大化问题

    Swing窗口Linux下不支持最大化问题 摘自:https://www.linuxidc.com/Linux/2009-06/20519.htm [日期:2009-06-17] 来源:www.qua ...

  5. zookeeper集群安装(转)

    转载地址:http://www.blogjava.net/hello-yun/archive/2012/05/03/377250.html 本方法,本人亲自试验,可以成功. ZooKeeper是一个分 ...

  6. 数据结构 hbb(汉堡包)

    数据结构 hbb(汉堡包) 问题描述 汉堡包有收集汉犇犇的癖好,它喜欢把汉犇犇一个叠一个的放置. 因为它有强迫症,所以每当它想放一个新的汉犇犇进去的时候并不一定想直接叠在最上面,简单的说,当他想放第 ...

  7. react+node制作在线笔记本(一)

    一. 使用react的官方脚手架create-react-app创建项目,为了支持使用sass,我们使用eject命令 这样,我们就可以自由对webpack进行配置了. 二. 首先要安装style-l ...

  8. C++面试笔记--面向对象

    说到面向对象,大家第一反应应该就是它的三大特性:封装性.继承性和多态性.那么我们先简单的了解一下这三大特性: (1)封装性:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的 ...

  9. rpm bug

    rpm无法安装 今天安装java时候,下载的rpm的包,但是用linux打开时候发现不能正常打开. 错误详情 主要是rpm安装时候的错误,java提示的错误就没有记录了. Reading packag ...

  10. MATLAB数字图像处理(一)基础操作和傅立叶变换

    数字图像处理是一门集计算机科学.光学.数学.物理学等多学科的综合科学.随着计算机科学的发展,数字图像处理技术取得了巨大的进展,呈现出强大的生命力,已经在多种领域取得了大量的应用,推动了社会的发展.其中 ...