zoukankan      html  css  js  c++  java
  • js之全选,反选,全不选案例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>全选,反选,全不选案例</title>
    </head>
    <body>
    <input type="checkbox" name="interest"> 篮球 <br>
    <input type="checkbox" name="interest"> 读书 <br>
    <input type="checkbox" name="interest"> 电影 <br>
    <input type="checkbox" name="interest"> 阅读 <br>
    <hr>
    <input type="checkbox" id="selectAllOrNot" name="selectAllOrNot"> 全选/全不选
    <button id="reverseSelection">反选</button>
    </body>
    
    <script>
        var interest = document.getElementsByName('interest');
        var selectAllOrNot = document.getElementById('selectAllOrNot');
        var reverseSelection = document.getElementById('reverseSelection');
    
        // onchange 是改变状态, 应用场景有三个地方: checkbox, 单选的select,  radio
        selectAllOrNot.onchange = function () {
            // 获取到当前所操作的 checkbox的状态, 值为true或者false
            var status = this.checked;
            // 让所有的interests的 checked 状态和 "全选/全不选" 状态保持一致。
            for (var i = 0; i < interest.length; i++) {
                interest[i].checked = status;
            }
        }
    
        var interestLenght = interest.length;
    
        //存在全部选择就把全选框自动勾上
        function isMax() {
            var num = 0;
            var interestLenght = interest.length;
            for (var j = 0; j < interestLenght; j++) {
                // 如果有一个被选中,num就 +1
                if (interest[j].checked) {
                    num++;
                }
            }
            console.log('max');
            // 根据选中数量与总长度是否相同来确定"全选/全不选"最终的选中状态
            selectAllOrNot.checked = (num == interestLenght);
        }
    
        //循环的目的是给每个 interest 绑定改变事件。
        for (var i = 0; i < interestLenght; i++) {
            /**
             * 每次对每个 interest改变之后, 判断所有的 interest 的状态. 判断的思路
             * 是获取所有的选中的 interest 的数量, 然后与 interest的总数量做比较,如果
             * 数量相同表示都被选中, 那么"全选/全不选"就要被选中,如果数量不相同,那么"全选/全不选"就不选中
             */
            interest[i].onchange = isMax;//对事件赋值函数,只需要函数名
        }
        
        //反选事件
        reverseSelection.onclick = function () {
            console.log('dgf');
            for (var i = 0; i < interestLenght; i++) {
                interest[i].checked = !interest[i].checked;
            }
            isMax();//执行函数
        }
    </script>
    </html>
    
    

    改进版

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <input type="checkbox" name="interest"> 篮球 <br>
    <input type="checkbox" name="interest"> 读书 <br>
    <input type="checkbox" name="interest"> 电影 <br>
    <input type="checkbox" name="interest"> 阅读 <br>
    <hr>
    <input type="checkbox" id="selectAllOrNot" name="selectAllOrNot"> 全选/全不选
    <button id="reverseSelection">反选</button>
    </body>
    
    <script>
        var interest = document.getElementsByName('interest');
        var selectAllOrNot = document.getElementById('selectAllOrNot');
        var reverseSelection = document.getElementById('reverseSelection')
        // onchange 是改变状态, 应用场景有三个地方: checkbox, 单选的select,  radio
        selectAllOrNot.onchange = function () {
            // 获取到当前所操作的 checkbox的状态, 值为true或者false
            var status = this.checked;
            // 让所有的interests的 checked 状态和 "全选/全不选" 状态保持一致。
            for (var i = 0; i < interest.length; i++) {
                interest[i].checked = status;
            }
        }
    
        var interestLenght = interest.length;
    
        //循环的目的是给每个 interest 绑定改变事件。
        for (var i = 0; i < interestLenght; i++) {
    
            /**
             * 每次对每个 interest改变之后, 判断所有的 interest 的状态. 判断的思路
             * 是获取所有的选中的 interest 的数量, 然后与 interest的总数量做比较,如果
             * 数量相同表示都被选中, 那么"全选/全不选"就要被选中,如果数量不相同,那么"全选/全不选"就不选中
             */
            interest[i].onchange = function () {
                var num = 0;
                for (var j = 0; j < interestLenght; j++) {
                    // 如果有一个被选中,num就 +1
                    if (interest[j].checked) {
                        num++;
                    }
                }
                // 根据选中数量与总长度是否相同来确定"全选/全不选"最终的选中状态
                selectAllOrNot.checked = (num == interestLenght);
            }
        }
    //反选操作
        reverseSelection.onclick = function () {
            var flag = true;
            for (var j = 0; j < interestLenght; j++) {
    //各个选择的反选逻辑操作,true取false,false取true
                if (interest[j].checked) {
                    flag=false;//在反选时,当有一个选项打钩,那么反选后,必定不会全部都被勾上,所以也不需要自动勾上全选框
                    interest[j].checked=false;
                }else{
                    interest[j].checked=true;
                }
            }
            selectAllOrNot.checked=flag;//interest[j]全为true就为true,有一个为false那么就为false。
        }
    
    </script>
    </html>
    

    效果图

    Don't just say it. Show me your code.
  • 相关阅读:
    remove white space from read
    optimize the access speed of django website
    dowload image from requests
    run jupyter from command
    crawl wechat page
    python version 2.7 required which was not found in the registry windows 7
    health
    alternate rows shading using conditional formatting
    word
    【JAVA基础】static 关键字
  • 原文地址:https://www.cnblogs.com/bigbeardhk/p/12765388.html
Copyright © 2011-2022 走看看