点餐选择框实例(全选、反选的运用)

/*需求分析:
(1)点击上方选择框,让下方所有选择框状态与上方选择框一致
(2)点击下方选择框
    * 如果所有的选择框都是选中状态,上方选择框选中状态
    * 反之,只要有一个选择框不是选中状态,上方选择框未选中状态

 思路分析:
    * 1.获取元素
    * 2.注册事件
    * 3.事件处理

 */

效果预览
/原生js实现/

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        table {
            border-collapse: collapse;
            border: 1px solid #c0c0c0;
            width: 500px;
            margin: 100px auto;
            text-align: center;
        }

        th {
            background-color: #09c;
            font: bold 16px "微软雅黑";
            color: #fff;
            height: 24px;
        }

        td {
            border: 1px solid #d0d0d0;
            color: #404060;
            padding: 10px;
        }
    </style>
</head>
<body>
<table>
    <tr>
        <th>
            <input type="checkbox" name="" id="checkAll"/>全选/全不选
        </th>
        <th>菜名</th>
        <th>商家</th>
        <th>价格</th>
    </tr>
    <tr>
        <td>
            <input type="checkbox" name="check"/>
        </td>
        <td>红烧肉</td>
        <td>隆江猪脚饭</td>
        <td>¥200</td>
    </tr>
    <tr>
        <td>
            <input type="checkbox" name="check"/>
        </td>
        <td>香酥排骨</td>
        <td>隆江猪脚饭</td>
        <td>¥998</td>
    </tr>
    <tr>
        <td>
            <input type="checkbox" name="check"/>
        </td>
        <td>北京烤鸭</td>
        <td>隆江猪脚饭</td>
        <td>¥88</td>
    </tr>


</table>

</body>

<script>
    /*需求分析:(1)点击上方选择框,让下方所有选择框状态与上方选择框一致
    (2)点击下方选择框
        * 如果所有的选择框都是选中状态,上方选择框选中状态
        * 反之,只要有一个选择框不是选中状态,上方选择框未选中状态

     思路分析:
        * 1.获取元素
        * 2.注册事件
        * 3.事件处理

     */

    // 1.获取元素
    var checkAll = document.getElementById('checkAll');//上方选择框(全选全不选)
    var checkList = document.getElementsByName('check');//下方选择框数组
    // 2.注册事件

    //2.1 上方选择框
    checkAll.onclick = function (  ) {
        // 3.事件处理
        //让下方选择框状态与自身一致
        console.log ( this.checked );
        for(var i = 0;i<checkList.length;i++){
            checkList[i].checked = this.checked;
        }
    }

    //2.2 下方选择框列表
    for(var i = 0;i<checkList.length;i++){
        checkList[i].onclick = function (  ) {
            //3.事件处理
            console.log ( this.checked );
            /*1.如果一个操作产生的结果只有两种情况:开关思想
            2.先假设开关成立true
            3.验证假设,如果被推翻就把开关状态改为false

            如果所有的选择框都是选中状态,上方选择框选中状态
               反之,只要有一个选择框不是选中状态,上方选择框未选中状态

             */
            var isAllCheck = true;//假设本次点击刚好所有的都是选中状态
            for(var j = 0;j<checkList.length;j++){
                if(checkList[j].checked == false){//只要有任何一个选择框的状态是未选中,假设被推翻
                    isAllCheck = false;
                    break;//这里可以加break关键字提高性能,只要假设被推翻后面没有验证必要
                }
            }

            checkAll.checked = isAllCheck;//将开关的结果赋值给上方选择框

        }
    }

</script>
</html>
/*jQuery实现方法
网页结构一样,在这里给出js代码*/
<script src="jquery-1.12.4.js"></script>
<script>
    /*需求分析:(1)点击上方选择框,让下方所有选择框状态与上方选择框一致
    (2)点击下方选择框
        * 如果所有的选择框都是选中状态,上方选择框选中状态
        * 反之,只要有一个选择框不是选中状态,上方选择框未选中状态

     思路分析:
        * 1.获取元素
        * 2.注册事件
        * 3.事件处理

     */

    $(function () {

        $('#checkAll').on('click',function () {
            $('input[name=check]').prop('checked',$(this).prop('checked'));
        })

        $('input[name=check]').on('click',function (){
            //如何判断下面的多选框都选中了
            //获取下面所有多选框的个数;  获取下面所有选中的多选框的个数.  如果这两个值相等那么就表示下面的多选框们都被选中了.
            var allNum = $('input[name=check]').length;//下面部分的多选框数目
            var selNum = $('input[name=check]:checked').length;//选中的多选框数目
            // console.log(selNum);
            //如果这两个值相等那么就表示下面的多选框们都被选中了.上面的多选框就要选中.
            // if(allNum == selNum){
            //     $('#checkAll').prop('checked',true);
            // }else {
            //     $('#checkAll').prop('checked',false);
            // }
            //上面的if-else结构可以用下面一句话代替
            $('#checkAll').prop('checked',allNum == selNum);
        })
    })


</script>
HTML5/CSS 择器 第一关 plate plate元素 第二关 bento bento元素 第三关 #fancy id为fancy的元素 第四关 plate apple plate祖先元素下的apple后代元素 第五关 #fancy pickle id为#fancy的祖先元素下的pickle后代元素 第六关 .small 组为small的元素 第七关 orange.small 组为small的orange元素 第八关 bento>orange.small bento父元素下的组为small的orange子元素 第九关 plate,bento,div plate,bento兄弟元素在div元素中 第十关 * *代表所有元素 第十一关 plate>* plate父元素的所有子元素 第十二关 plate + apple 兄弟元素择器,plate元素的后一个元素 第十三关 bento~pickle 兄弟元素择器,bento元素后的多个pickle元素 第十四关 plate>apple plate父元素下的apple子元素 第十五关 plate orange:first-child 子元素择器,plate元素下的第一个orange元素 第十六关 plate :only-child 所有plate元素下的元素 第十七关 #fancy :last-child,pickle:last-child id为fancy的元素的最后一个和pickle元素的最后一个 第十八关 div plate:nth-child(3) div元素中的第三个plate元素 第十九关 div bento :nth-last-child(4) div元素中倒数第四个bento元素 第二十关 apple:first-of-type 第一个apple元素 第二十一关 plate:nth-of-type(even) 所有偶数个的plate元素 第二十二关 plate:only-of-type(6n+3),plate:only-of-type(6n+5) plate元素下的第3个和第5个元素 第二十三关 plate apple.small:only-of-type plate元素下满足apple.small元素的唯一一个元素 第二十四关 orange.small:last-of-type,apple.small:last-of-type 是orange.samll和apple.small元素的最后一个元素 第二十五关 bento:empty bento元素里没有包括额外元素 第二十六关 apple:not(.small) apple里没有组是.small的元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值