原生JS版和jquery版實(shí)現(xiàn)checkbox的全選/全不選/點(diǎn)選/行內(nèi)點(diǎn)選(Mr.Think)
日常項(xiàng)目中, 對(duì)于列表類文章或數(shù)據(jù), 大概都會(huì)用到checkbox的全選或全不選的功能, 以前的項(xiàng)目中也寫過checkbox的選擇js, 但都沒有整理過. 正好前幾天一個(gè)兄弟遇到了這個(gè)問題, 索性, 我花了點(diǎn)時(shí)間, 用原生JS與jQuery分別寫了一個(gè)版本, 考慮到使用時(shí)靈活性問題, 未封裝, 需要的童鞋使用時(shí)自行改下相關(guān)參數(shù).
功能介紹點(diǎn)此查看DEMO演示
1. 全選/全不選 選框一體實(shí)現(xiàn), 即列表中選框的狀態(tài)與全選/全不選框前的選框狀態(tài)一致;
2. 自動(dòng)更改 全選/全不選 選框的狀態(tài), 即列表中選框都選中時(shí), 全選/全不選 選框也選中, 反之亦然;
3. 列表行內(nèi)點(diǎn)擊也可選中行內(nèi)的checkbox, 并與1,2中的功能聯(lián)動(dòng).
另,本文重在寫全選, 鼠標(biāo)劃入劃出背景變色為簡(jiǎn)易實(shí)現(xiàn), 更加完善的請(qǐng)參考:
http://www.dbjr.com.cn/article/24125.htm
原生JS版本核心代碼
html代碼
<form id="js" name="js" action="#"> <h5>原生JS樣例</h5> <dl> <dt><label for="js_chk_0"><input type="checkbox" id="js_chk_0" name="chk_can" value="" />全選/全不選</label></dt> <dd><span>2010-12-12</span><input type="checkbox" name="jsitems" value="" />原生JS實(shí)現(xiàn)的全選/全不選,點(diǎn)行也可選中或取消</dd> <dd><span>2010-12-12</span><input type="checkbox" name="jsitems" value="" />原生JS實(shí)現(xiàn)的全選/全不選,點(diǎn)行也可選中或取消</dd> <dd><span>2010-12-12</span><input type="checkbox" name="jsitems" value="" />原生JS實(shí)現(xiàn)的全選/全不選,點(diǎn)行也可選中或取消</dd> <dd><span>2010-12-12</span><input type="checkbox" name="jsitems" value="" />原生JS實(shí)現(xiàn)的全選/全不選,點(diǎn)行也可選中或取消</dd> <dd><span>2010-12-12</span><input type="checkbox" name="jsitems" value="" />原生JS實(shí)現(xiàn)的全選/全不選,點(diǎn)行也可選中或取消</dd> <dt><label for="js_chk_1"><input type="checkbox" id="js_chk_1" name="chk_can" value="" />全選/全不選</label></dt> </dl> </form>
原生js代碼
//原生JS實(shí)現(xiàn)全選全不選類 window.onload = function iCheckAll(){ var js_chk = document.forms['js'].chk_can; var jsitems = document.forms['js'].jsitems; var jsrows = document.getElementById('js').getElementsByTagName('dd'); //判斷選中個(gè)數(shù)與實(shí)際選框個(gè)數(shù)實(shí)現(xiàn)全選/全不選框的狀態(tài) var chk_canle = function(){ var checkedLen = 0; //計(jì)算列表中選中狀態(tài)的選框個(gè)數(shù) for (var m = 0; m < jsitems.length; m++) { if (jsitems[m].checked) { checkedLen += 1; } } //判斷選中個(gè)數(shù)與實(shí)際個(gè)數(shù)是否相同,以確定全選/全不選狀態(tài) for (var m = 0; m < js_chk.length; m++) { js_chk[m].checked = (jsitems.length == checkedLen); } } //全選與全不選一體實(shí)現(xiàn) for (var i = 0; i < js_chk.length; i++) { js_chk[i].onclick = function(){ //列表中選框與全選選框統(tǒng)一狀態(tài) for (var m = 0; m < jsitems.length; m++) { jsitems[m].checked = this.checked; } //全選選框統(tǒng)一狀態(tài) for (var m = 0; m < js_chk.length; m++) { js_chk[m].checked = this.checked; } } } //列表中選框點(diǎn)擊 for (var i = 0; i < jsitems.length; i++) { jsitems[i].onclick = function(e){ //阻止冒泡,避免行點(diǎn)擊事件中,直接選擇選框無效 e && e.stopPropagation ? e.stopPropagation() : window.event.cancelBubble=true; chk_canle(); } } //行內(nèi)點(diǎn)擊 for (var i = 0; i < jsrows.length; i++) { jsrows[i].onclick = function(){ //行內(nèi)點(diǎn)擊時(shí),行內(nèi)的選框狀態(tài)為原狀態(tài)取反 this.getElementsByTagName('input')[0].checked = !this.getElementsByTagName('input')[0].checked; chk_canle(); } //劃入劃出請(qǐng)參考http://mrthink.net/javascript-tagnames-highlight/ jsrows[i].onmouseover = function(){ this.className = 'hover'; } jsrows[i].onmouseout = function(){ this.className = ''; } } }
jquery版本核心代碼
html代碼
<form id="jq" name="jq" action="#"> <h5>jQuery樣例</h5> <dl> <dt><label for="jq_chk_0"><input type="checkbox" id="jq_chk_0" name="chk_can" value="" />全選/全不選</label></dt> <dd><span>2010-12-12</span><input type="checkbox" name="jqitems" value="" />基于jQuery的全選/全不選,點(diǎn)行也可選中或取消</dd> <dd><span>2010-12-12</span><input type="checkbox" name="jqitems" value="" />基于jQuery的全選/全不選,點(diǎn)行也可選中或取消</dd> <dd><span>2010-12-12</span><input type="checkbox" name="jqitems" value="" />基于jQuery的全選/全不選,點(diǎn)行也可選中或取消</dd> <dd><span>2010-12-12</span><input type="checkbox" name="jqitems" value="" />基于jQuery的全選/全不選,點(diǎn)行也可選中或取消</dd> <dd><span>2010-12-12</span><input type="checkbox" name="jqitems" value="" />基于jQuery的全選/全不選,點(diǎn)行也可選中或取消</dd> <dt><label for="jq_chk_1"><input type="checkbox" id="jq_chk_1" name="chk_can" value="" />全選/全不選</label></dt> </dl> </form>
jquery核心實(shí)現(xiàn)代碼
//jQ實(shí)現(xiàn)全選全不選 $(function(){ var _jq_chk = $('#jq>dl>dt>label>:checkbox'); var _jqitems = $(':checkbox[name=jqitems]'); var _rows = $('#jq>dl>dd'); //全選與全不選一體實(shí)現(xiàn) _jq_chk.click(function(){ //列表中選框和全選選框統(tǒng)一狀態(tài) _jqitems.add(_jq_chk).attr('checked', this.checked); }); //選框的點(diǎn)擊事件 _jqitems.click(function(e){ //阻止冒泡,避免行點(diǎn)擊事件中,直接選擇選框無效 e.stopPropagation(); //判斷選中個(gè)數(shù)與實(shí)際個(gè)數(shù)是否相同,以確定全選/全不選狀態(tài) _jq_chk.attr('checked', _jqitems.size() == _jqitems.filter(':checked').size()); }); //點(diǎn)選行時(shí)選中行內(nèi)的checkbox _rows.bind({ mouseenter: function(){ $(this).addClass('hover'); }, mouseleave: function(){ $(this).removeClass('hover'); }, //點(diǎn)選 click: function(){ //行內(nèi)點(diǎn)擊時(shí),行內(nèi)的選框狀態(tài)為原狀態(tài)取反 $(this).find(':checkbox').attr('checked', !$(this).find(':checkbox').get(0).checked) //判斷選中個(gè)數(shù)與實(shí)際個(gè)數(shù)是否相同,以確定全選/全不選狀態(tài) _jq_chk.attr('checked', _jqitems.size() == _jqitems.filter(':checked').size()); } }); });
這個(gè)代碼比普通的實(shí)現(xiàn)代碼要多不少,主要表現(xiàn)為點(diǎn)擊行就可以實(shí)現(xiàn)選擇功能。更多的功能更多的代碼。大家可以根據(jù)需要自行刪減。
相信很多做web的人都會(huì)遇到一些JS問題,那到底是用JQ來實(shí)現(xiàn)還是用JS來實(shí)現(xiàn),常常困擾著我們,但其實(shí)JS是通用的,而JQ是建在自己加載的JQ庫(kù)的,所在真正實(shí)現(xiàn)是沒有任何區(qū)別的。
- js實(shí)現(xiàn)全選和全不選
- js實(shí)現(xiàn)全選和全不選功能
- Js實(shí)現(xiàn)復(fù)選框的全選、全不選反選功能代碼實(shí)例
- JS實(shí)現(xiàn)“全選”和"全不選"功能代碼實(shí)例
- JS實(shí)現(xiàn)CheckBox復(fù)選框全選、不選或全不選功能
- js與jQuery實(shí)現(xiàn)checkbox復(fù)選框全選/全不選的方法
- JS實(shí)現(xiàn)CheckBox復(fù)選框全選全不選功能
- 使用js如何實(shí)現(xiàn)全選與全不選
- jquery全選/全不選/反選另一種實(shí)現(xiàn)方法(配合原生js)
- JavaScript實(shí)現(xiàn)全選和全不選操作
相關(guān)文章
JavaScript中檢查對(duì)象property的存在性方法介紹
這篇文章主要介紹了JavaScript中檢查對(duì)象property的存在性方法介紹,本文講解了4種方法來檢查某個(gè)對(duì)象o是否擁有property x,需要的朋友可以參考下2014-12-12基于JavaScript實(shí)現(xiàn)隨機(jī)顏色輸入框
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)隨機(jī)顏色輸入框的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),需要的朋友參考下吧2016-12-12總結(jié)JavaScript中布爾操作符||與&&的使用技巧
這篇文章主要介紹了總結(jié)JavaScript中布爾操作符||與&&的使用技巧,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11《JavaScript DOM 編程藝術(shù)》讀書筆記之DOM基礎(chǔ)
這篇文章主要介紹了《JavaScript DOM 編程藝術(shù)》讀書筆記之DOM基礎(chǔ),需要的朋友可以參考下2015-01-01一文秒懂JavaScript構(gòu)造函數(shù)、實(shí)例、原型對(duì)象以及原型鏈
這篇文章主要介紹了一文秒懂JavaScript構(gòu)造函數(shù)、實(shí)例、原型對(duì)象以及原型鏈的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08微信小程序獲取復(fù)選框全選反選選中的值(實(shí)例代碼)
這篇文章主要介紹了微信小程序獲取復(fù)選框全選反選選中的值,本文通過實(shí)例代碼給大家簡(jiǎn)單介紹,需要的朋友可以參考下2019-12-12Cropper.js 實(shí)現(xiàn)裁剪圖片并上傳(PC端)
本案例是參考cropper站點(diǎn)實(shí)例,進(jìn)行修改簡(jiǎn)化。接下來通過本文給大家分享Cropper.js 實(shí)現(xiàn)裁剪圖片并上傳(PC端) 功能,需要的朋友參考下吧2017-08-08javascript中Date()函數(shù)在各瀏覽器中的顯示效果
本文給大家分享的是javascript中Date()函數(shù)在各瀏覽器中的顯示效果,由于各大瀏覽器的兼容性問題,本文做了這個(gè)測(cè)試,希望有需要的小伙伴可以少走些彎路2015-06-06