• 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.
  • 相关阅读:
    jdk7_ConcurrentHashMap 图示
    Teradata 日期函数
    Teradata正则表达式
    Teradata sql去除字段中的字母/数字
    sql查询连续3天有交易记录的客户
    批量生成sql查询语句
    sql查询字段中是否含有字母/数字/符号
    sql查询每个人最新的2个电话号码
    python连接Teradata数据库
    dos命令获取文件行数
  • 原文地址:https://www.cnblogs.com/bigbeardhk/p/12765388.html
Copyright © 2020-2023  润新知