zoukankan      html  css  js  c++  java
  • 触发全选按钮的几种思路

    需求:点击全选,选中上面所有的列表项;点击列表项中的每一个水果,如果有未选中则取消全选按钮,如果都选中了则激活全选按钮。

    常规操作

    点击每个列表选项时,遍历所有列表选项并检查是否有未选中的,如果有则可以确定全选按钮的状态为未选中,否则全选按钮置为选中。

    var oAllInput = document.querySelector('#all');
    var aInput = document.querySelectorAll('ul input');
    
    // 点击全选 input 时根据自己的状态来控制其他列表项的 input
    oAllInput.onchange = function() {
        for(var i = 0; i < aInput.length; i ++) {
            aInput[i].checked = this.checked;
        }
    };
    
    // 每次点击每一个列表项的 input 时,判断全选的 input 是否需要被选中
    for(var i = 0; i < aInput.length; i ++) {
        aInput[i].onclick = function() {
            if (!this.checked) {
                // 如果当前点击的按钮未选中,那就可以直接确定全选按钮的状态了
                oAllInput.checked = false;
                // 也就没有必要进行下去了
                return;
            }
            var bBar = true;
            for(var i = 0; i < aInput.length; i ++) {
                // 发现有一个没选中的
                if(!aInput[i].checked) {
                    bBar = false;
                    // 发现有一个没选中的也就可以断定 oAllInput 的状态了,就没有必要再进行下去了
                    // 当然你不写 break 逻辑上也是对的,只是存在性能浪费
                    break;
                }
            }
            oAllInput.checked = bBar;
        };
    }

    注意细节

    思路和上面一样,下面的写法也是可以的,但有一点需要注意:点击列表中的每一项进行循环时,碰到未选中的一定要跳出循环,不然前面全选按钮的状态都会被最后一个按钮的状态所覆盖。

    for (var i = 0; i < aInput.length; i++) {
        aInput[i].onclick = function () {
            if (!this.checked) {
                // 如果当前点击的按钮未选中,那就可以直接确定全选按钮的状态了
                oAllInput.checked = false;
                // 也就没有必要进行下去了
                return;
            }
            for (var i = 0; i < aInput.length; i++) {
                if (!aInput[i].checked) {
                    oAllInput.checked = false;
                    // 这里的 break 是必须要加的!不然全选按钮的状态永远是以最后一个的选中状态为准,这并不是我们所希望的
                    break;
                } else {
                    oAllInput.checked = true;
                }
            }
        };
    }

    其他方法

    每次点击列表中的按钮时,获取所有已选中 input 的长度,并判断已选中 input 的 length 是否等于所有 input 的 length,如果相等,就可以激活全选按钮啦,否则则取消全选。

    for (var i = 0; i < aInput.length; i++) {
        aInput[i].onclick = function () {
            var aInputChecked = document.querySelectorAll('ul input:checked');
            // 已选中 length 等于所有 length 就证明全选中了,也就可以激活全选按钮啦
            if (aInputChecked.length === aInput.length) {
                oAllInput.checked = true;
            } else {
                oAllInput.checked = false;
            }
        };
    }
  • 相关阅读:
    POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
    LCA 最近公共祖先 (模板)
    线段树,最大值查询位置
    带权并查集
    转负二进制
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
  • 原文地址:https://www.cnblogs.com/yadi001/p/13564169.html
Copyright © 2011-2022 走看看