文章插图
文章插图
多选框全选与全不选的实现
多选框全选与全不选是前端开发人员必学的案例了,这里完成了以下需求:
当用户勾上“全选”时,自动选中所有语言,并把“全选”变成“全不选”;当用户去掉“全不选”时,自动不选中所有语言;当用户点击“反选”时,自动把所有语言状态反转(选中的变为未选,未选的变为选中);当用户把所有语言都手动勾上时,“全选”被自动勾上,并变为“全不选”;当用户手动去掉选中至少一种语言时,“全不选”自动被去掉选中,并变为“全选” 。
网页代码部分如下:
<form id="test-form" action="test"><legend>请选择想要学习的编程语言:</legend><fieldset><p><label class="selectAll"><input type="checkbox"><span class="selectAll">全选</span><span class="deselectAll">全不选</span></label><a href="http://www.mnbkw.com/jxjc/190580/#0" class="invertSelect">反选</a></p><p><label><input type="checkbox" name="lang" value="http://www.mnbkw.com/jxjc/190580/javascript"> JavaScript</label></p><p><label><input type="checkbox" name="lang" value="http://www.mnbkw.com/jxjc/190580/python"> Python</label></p><p><label><input type="checkbox" name="lang" value="http://www.mnbkw.com/jxjc/190580/ruby"> Ruby</label></p><p><label><input type="checkbox" name="lang" value="http://www.mnbkw.com/jxjc/190580/haskell"> Haskell</label></p><p><label><input type="checkbox" name="lang" value="http://www.mnbkw.com/jxjc/190580/scheme"> Scheme</label></p><p><button type="submit">Submit</button></p></fieldset></form>
先获取dom元素varform = $('#test-form'),langs = form.find('[name=lang]'),selectAll = form.find('label.selectAll :checkbox'),selectAllLabel = form.find('label.selectAll span.selectAll'),deselectAllLabel = form.find('label.selectAll span.deselectAll'),invertSelect = form.find('a.invertSelect');
【js控制checkbox选中和不选中 jsp判断checkbox是否选中】全选与全不选实现起来很简单,利用jquery对象的prop方法来设置选中状态,需要注意的是这里不能使用attr()方法: // 全选与全不选selectAll.on("change",()=>{if(selectAll.prop("checked")) {//全选langs.prop("checked",true)selectAllLabel.hide()deselectAllLabel.show()}else{// 全不选langs.prop("checked",false)selectAllLabel.show()deselectAllLabel.hide()}})
反选的方法也很简单:invertSelect.on("click",()=>{//jquery对象要先使用Array.from方法转换成数组,利用数组来遍历//需要注意的是,遍历的每一个元素是dom对象,而不是jquery对象了,//不能再使用prop方法了Array.from(langs).forEach(item=>item.checked=!item.checked)})
当用户把所有语言都手动勾上时,“全选”被自动勾上,并变为“全不选” 。实现这个需求,需要让change事件绑定所有的name为lang的checkbox对象(langs),事件触发时,要遍历所有的langs,如果全部为选中状态,则“全选”自动勾上,并变为“全不选” 。这里获取所有的选中状态的checkbox,可以使用 $(‘[name=lang]:checked’),代码如下:var langsChecked = $('[name=lang]:checked')//如果选中的checkbox数量大于等于5,即是全部选中if(langsChecked.length>=5){//全选打勾selectAll.prop("checked",true)//全选标签隐藏selectAllLabel.hide()//全不选标签显示deselectAllLabel.show()}else{//全选去掉勾selectAll.prop("checked",false)//全选标签显示selectAllLabel.show()//全不选标签隐藏deselectAllLabel.hide()}
为避免与之前的代码显示冲突,这里封装为一个方法,前面的代码也需要使用该方法,完整代码如下: $(function(){varform = $('#test-form'),langs = form.find('[name=lang]'),selectAll = form.find('label.selectAll :checkbox'),selectAllLabel = form.find('label.selectAll span.selectAll'),deselectAllLabel = form.find('label.selectAll span.deselectAll'),invertSelect = form.find('a.invertSelect');// 全选与全不选selectAll.on("change",()=>{if(selectAll.prop("checked")) {//全选langs.prop("checked",true)selectAllLabel.hide()deselectAllLabel.show()}else{// 全不选langs.prop("checked",false)selectAllLabel.show()deselectAllLabel.hide()}select()})//反选invertSelect.on("click",()=>{//jquery对象要先使用Array.from方法转换成数组,利用数组来遍历//需要注意的是,遍历的每一个元素是dom对象,而不是jquery对象了,//不能再使用prop方法了Array.from(langs).forEach(item=>item.checked=!item.checked)select()})//当用户把所有语言都手动勾上时,“全选”被自动勾上,并变为“全不选”;//当用户手动去掉选中至少一种语言时,“全不选”自动被去掉选中,并变为“全选” 。function select(){var langsChecked = $('[name=lang]:checked')console.log(langsChecked)//如果选中的checkbox数量大于等于5,即是全部选中if(langsChecked.length>=5){selectAll.prop("checked",true)selectAllLabel.hide()deselectAllLabel.show()}else{selectAll.prop("checked",false)selectAllLabel.show()deselectAllLabel.hide()}}langs.change(select)})
- ps选择背景色快捷键 ps里添加背景色快捷键
- excel怎么用if筛选 怎样用excel的if函数筛选出数值
- ps海报怎么改颜色 ps做海报颜色模式怎么选择
- 网站建设首选 企业网站的建设原则
- Windows域管理 windows域控制器教程
- 二层交换机和三层交换机的特点?如何选择两者? 二层交换机和三层交换区别
- excel表中筛选的数据如何复制粘贴 excel表格筛选出来的数据怎么复制粘贴
- windows10c盘无法扩展卷 win10c盘不能选扩展卷
- 红楼梦南安太妃为什么选探春 南安太妃和林黛玉是什么关系
- 远程控制指令执行失败,请确认车辆断负多久? 远程控制指令执行失败,请确认车辆状态