1. 程式人生 > >復選框與全選框的選中狀態的聯動

復選框與全選框的選中狀態的聯動

() 原型 結果 cti bottom spa eight get edge

類似在網購時在購物車選擇商品時的復選框與全選框的聯動事件

對於原型,構造函數之類的還不熟,強行用了一波,結果寫得又長又臭。

但總算功能還是做出來了,總要多實踐才會變熟的。全部代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>checkbox</title>
    <style>
        .container{
            width:
30% ; height: 200px; border:1px solid #333; margin:0 auto; padding: 50px 0 0 50px; } .container .top{ margin:0 0 20px 0 ; } .container input{ outline: none; } .container .bottom{ margin:10px
0 0 0; } .bottom .submit{ outline: none; border:0; background: none; border:1px solid #333; width:50px; height:30px; } </style> </head> <body> <div class="container"> <div class="top"> <input type="checkbox" class="check" checked="checked" name="1">1 <input type="checkbox" class="check" checked="checked" name="2">2 <input type="checkbox" class="check" checked="checked" name="3">3 </div> <div class="main"> <input type="checkbox" class="all" checked="checked">全選
<input type="checkbox" class="reverse" >反選 </div> <div class="bottom"> <button class="submit">結算</button><small>(只能點一次)</small> </div> </div> <script> //所有復選框默認為選中狀態,因此全選的框也是默認為選中狀態 function Check(){ this.inputList=document.querySelectorAll(‘.check‘); this.all=document.querySelector(‘.all‘); this.reverse=document.querySelector(‘.reverse‘); this.submit=document.querySelector(‘.submit‘); } Check.prototype.init=function(){ this.choose() this.chooseAll() this.creverse() this.csubmit() } /*點擊單個復選框。 固定事件:當前框若是選中狀態,就取消選中,若當前框為非選中狀態,則相反 可能事件(主要是與全選框的聯動): 情況1:全選框處於選中狀態(就是所有的框都是選中狀態的情況下),若是當前框取消選中的話,,則全選框也會取消選中 情況2:全選框處於非選中狀態,而且除當前框的其它所有框都是選中狀態的情況下,若是當前框被選中,那麽全選也會自動變成選中狀態 */ Check.prototype.choose=function(){ var len=this.inputList.length, list=this.inputList, all=this.all, self=this; for(var i=0;i<len;i++){ list[i].addEventListener(‘click‘,function(){ if(this.getAttribute(‘checked‘)==‘checked‘){ this.setAttribute(‘checked‘,‘‘) all.setAttribute(‘checked‘,‘‘) all.checked=false }else{ this.setAttribute(‘checked‘,‘checked‘) if(self.isChecked()){ all.setAttribute(‘checked‘,‘checked‘) all.checked=true } } },false) } } //檢測全部復選框是否選中 Check.prototype.isChecked=function(){ return [].every.call(this.inputList,function(item,index){ if(item.getAttribute(‘checked‘)==‘checked‘){ return true }else{ return false } }) } //點擊全選框的事件 Check.prototype.chooseAll=function(){ var all=this.all, list=this.inputList; all.addEventListener(‘change‘,function(){ if(all.getAttribute(‘checked‘)==‘checked‘){ all.setAttribute(‘checked‘,‘‘) for(var i=0;i<list.length;i++){ list[i].checked=false list[i].setAttribute(‘checked‘,‘‘) } }else{ for(var i=0;i<list.length;i++){ list[i].checked=true list[i].setAttribute(‘checked‘,‘checked‘) } all.setAttribute(‘checked‘,‘checked‘) } },false) } //點擊反選框的事件,本來是不打算加這個事件的,反正只是練習,多寫點也無所謂啦 Check.prototype.creverse=function(){ var all=this.all, list=this.inputList, reverse=this.reverse, self=this; reverse.addEventListener(‘change‘,function(){ if(reverse.getAttribute(‘checked‘)==‘checked‘){ for(var i=0;i<list.length;i++){ if(list[i].getAttribute(‘checked‘)==‘checked‘){ list[i].setAttribute(‘checked‘,‘‘) list[i].checked=false }else{ list[i].checked=true list[i].setAttribute(‘checked‘,‘checked‘) } } if(self.isChecked()){ all.checked=true; all.setAttribute(‘checked‘,‘checked‘) }else{ all.checked=false; all.setAttribute(‘checked‘,‘‘) } }else{ for(var i=0;i<list.length;i++){ if(list[i].getAttribute(‘checked‘)==‘checked‘){ list[i].setAttribute(‘checked‘,‘‘) list[i].checked=false }else{ list[i].checked=true list[i].setAttribute(‘checked‘,‘checked‘) } } if(self.isChecked()){ all.checked=true; all.setAttribute(‘checked‘,‘checked‘) }else{ all.checked=false; all.setAttribute(‘checked‘,‘‘) } } },false) } //點擊結算的事件 Check.prototype.csubmit=function(){ var btn=this.submit, list=this.inputList, arr=[], one=true; btn.addEventListener(‘click‘,function(){ if(one){ [].forEach.call(list,function(item,index){ if(item.getAttribute(‘checked‘)==‘checked‘){ arr.push(item.getAttribute(‘name‘)) } }) one=false alert(arr) } },false) } var check=new Check(); check.init() </script> </body> </html>

復選框與全選框的選中狀態的聯動