<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • js判斷單選框checkbox是否選中(詳解checkbox選中和不選中)


    多選框全選與全不選的實現

    多選框全選與全不選是前端開發人員必學的案例了,這里完成了以下需求:

    • 當用戶勾上“全選”時,自動選中所有語言,并把“全選”變成“全不選”;
    • 當用戶去掉“全不選”時,自動不選中所有語言;
    • 當用戶點擊“反選”時,自動把所有語言狀態反轉(選中的變為未選,未選的變為選中);
    • 當用戶把所有語言都手動勾上時,“全選”被自動勾上,并變為“全不選”;
    • 當用戶手動去掉選中至少一種語言時,“全不選”自動被去掉選中,并變為“全選”。

    網頁代碼部分如下:

    <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="#0" class="invertSelect">反選</a></p>
            <p><label><input type="checkbox" name="lang" value="javascript"> JavaScript</label></p>
            <p><label><input type="checkbox" name="lang" value="python"> Python</label></p>
            <p><label><input type="checkbox" name="lang" value="ruby"> Ruby</label></p>
            <p><label><input type="checkbox" name="lang" value="haskell"> Haskell</label></p>
            <p><label><input type="checkbox" name="lang" value="scheme"> Scheme</label></p>
            <p>
                <button type="submit">Submit</button>
            </p>
        </fieldset>
    </form>

    先獲取dom元素

    var
            form = $('#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');

    全選與全不選實現起來很簡單,利用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(){
        var
            form = $('#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)
    
    })

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费