DOM控制多选框练习

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <form action="" method="post">
        <span>你爱好的运动是:</span> <input type="checkbox" id="all" />全选/全不选</br>
        <input type="checkbox" id="item1" name="item" value="足球" />足球
        <input type="checkbox" id="item2" name="item" value="蓝球" />蓝球
        <input type="checkbox" id="item3" name="item" value="羽毛球" />羽毛球
        <input type="checkbox" id="item4" name="item" value="乒乓球" />乒乓球</br>
        <input type="button" id="allcheck" value="全选" />
        <input type="button" id="allncheck" value="全不选" />
        <input type="button" id="reversecheck" value="反选" />
        <!--细节是id都单存在使用 name是多存在使用-->
    </form>
    <script type="text/javascript">
        var all = document.getElementById("all");
        var items = document.getElementsByName("item");
        var item1 = document.getElementById("item1");
        var item2 = document.getElementById("item2");
        var item3 = document.getElementById("item3");
        var item4 = document.getElementById("item4");
        var allcheck = document.getElementById("allcheck");
        var allncheck = document.getElementById("allncheck");
        var reversecheck = document.getElementById("reversecheck");
        all.onclick = function () {
            /*全选或全不选*/
            /*onclick这次又可以了可能是必须指定id才能用
             all.addEventListener("click","方法名")这个也可以
            */
            let checkstats = 1;
            //先检测有没有没选的有没选的stats=0
            for (let i = 0; i < items.length; i++) {
                if (items.item(i).checked != true) {
                    checkstats = 0;
                }
            }
            if (checkstats == 0) {
                for (let i = 0; i < items.length; i++) {
                    items.item(i).checked = true;
                    all.checked = true;
                    /*这行是确保全选按钮与所有项目全亮或全不亮*/
                    /*这个checked属性在vs中.不出来wc*/
                }
            }
            if (checkstats == 1) {
                for (let i = 0; i < items.length; i++) {
                    items.item(i).checked = false;
                    all.checked = false;
                }
            }
        };
        /*单项取消全选也取消,单个单个全选后全选也点亮*/
        function onlycheck() {
            console.log("年后");
            let checkstats = 1;
            for (let i = 0; i < items.length; i++) {
                if (items.item(i).checked != true) {
                    checkstats = 0;
                }
            }
            if (checkstats == 1) {
                all.checked = true;
            } else {
                all.checked = false;
            }
        }
        item1.addEventListener("click", onlycheck);
        item2.addEventListener("click", onlycheck);
        item3.addEventListener("click", onlycheck);
        item4.addEventListener("click", onlycheck);
        /*循环添加试过了不行shit,对事件监听与onclick属性有点理解了*/
        /*
        首先都是异步方法事件监听的click是对无法使用onclick属性的dom来使用的
        他们都必须一直存在,丢了立马就用不了了不能像对象一样使用它
        */
        allcheck.onclick = function () {
            /*全选*/
            for (let i = 0; i < items.length; i++) {
                items.item(i).checked = true;
                all.checked = true;
            }
        }
        allncheck.onclick = function () {
            /*全不选*/
            for (let i = 0; i < items.length; i++) {
                items.item(i).checked = false;
                all.checked = false;
            }
        }
        reversecheck.onclick = function () {
            /*反选*/
            let c = 0;
            for (let i = 0; i < items.length; i++) {
                if (items.item(i).checked != true) {
                    items.item(i).checked = true;
                    c++;
                } else {
                    items.item(i).checked = false;
                    c--;
                }
            }
            if (c == 4) {
                /*全没选的c++最后=4 让他全选后all也选上*/
                all.checked = true;
            }
            if (c == -4) {
                all.checked = false;
            }

        }

    </script>
</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值