使用JQuery做一组复选框的功能。

之前做过复选框的功能,奈何笔记丢失,害的我又鼓捣了一番。。。还是博客园做笔记比较好。

假设现在有一个表格,每一行都有一个复选框按钮。在表头还有一个全选的复选框按钮。

①、当点击一个全选按钮时,下面的同组的复选框都被选中,再点击时取消全选,下面同组的所有复选框都取消。

②、当下面的所有选项都被选中时上面的全选框自动变为选中状态。当下面有一个选项的处于未选中状态时,上面的全选按钮自动变为未选中状态。

下面是表格的代码

<table border="1" cellpadding="10" cellspacing="0">
        <tr>
            <td><input type="checkbox" name="test1" id="quanxuan" />全选</td>
            <td>姓名</td>
            <td>省份</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="test1" id="yi" class="item" /></td>
            <td>张三</td>
            <td>福建</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="test1" id="er" class="item" /></td>
            <td>李四</td>
            <td>广东</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="test1" id="san" class="item" /></td>
            <td>王五</td>
            <td>江苏</td>
        </tr>

    </table>

下面是代码形成的表格

一、实现点击全选按钮时,下面的选项全被选中,再次点击,取消全选时,下面的选项全部处于未选中状态。

<script type="text/javascript">
    $(function(){
        $("#quanxuan").click(function(){
            var isCheck = $(this).prop("checked");
            if(isCheck){
                alert("全选");
                var items = $(".item");
                
                for(var i = 0; i < items.length; i++){
                    $(items[i]).attr("checked",true);
                }
            }else{
                alert("取消全选");        
                
                var items = $(".item");
                for(var i = 0; i < items.length; i++){
                    $(items[i]).attr("checked",false);
                }
                
            }
        });
    })
</script>

在这个过程犯了一个低级错误。for循环里面的代码:

$(items[i]).attr("checked",false);//正确的

被我写成了

$(items[i].attr("checked",false));//错误的

搞了半天没发现错误。。。。。JavaScript真的很讨厌。写js代码总会有一股煞气堵在胸口的感觉。

二、现在添加功能:当下面的所有选项都被选中时上面的全选框自动变为选中状态。当下面有一个选项的处于未选中状态时,上面的全选按钮自动变为未选中状态。

下面是完整的js代码:

<script type="text/javascript">
    $(function(){
        $("#quanxuan").click(function(){
            var isCheck = $(this).prop("checked");
            if(isCheck){
                var items = $(".item");
                
                for(var i = 0; i < items.length; i++){
                    $(items[i]).attr("checked",true);
                }
            }else{
                
                var items = $(".item");
                for(var i = 0; i < items.length; i++){
                    $(items[i]).attr("checked",false);
                }
                
            }
        });
        $(".item").click(function(){
            //检查是不是所有的选项都被选中了,如果是,将全选按钮设置为选中状态。否则设为未选中状态。
            var items = $(".item");
            var flag = true;
            for(var i = 0; i < items.length; i++){
                var isChecked = $(items[i]).prop("checked");
                if(!isChecked){
                    //将flag设为false,表示未全选。
                    flag = false;
                }
            }
            if(flag){
                $("#quanxuan").attr("checked", true);
            }else{
                $("#quanxuan").attr("checked", false);
            }
        });
    })
</script>
原文地址:https://www.cnblogs.com/GooPolaris/p/7920426.html