zoukankan      html  css  js  c++  java
  • js和jq实现全选反选

    在前端中用到全选反选的案例并不少,在这里呢我就实现这个功能给大家参考参考。

    这里呢就先贴上我的html和css代码

    <div class="wrap">
                <table>
                    <thead>
                        <tr>
                            <th>
                                <input type="checkbox" id="theadInp" />
                            </th>
                            <th>快递</th>
                            <th>收件人</th>
                            <th>电话</th>
                        </tr>
                    </thead>
                    <tbody id="tbody">
                        <tr>
                            <td>
                                <input type="checkbox" />
                            </td>
                            <td>顺丰</td>
                            <td>张大大</td>
                            <td>186*****897
                        </tr>
                        <tr>
                            <td>
                                <input type="checkbox" />
                            </td>
                            <td>韵达</td>
                            <td>张全蛋</td>
                            <td>186*****897
                        </tr>
                        <tr>
                            <td>
                                <input type="checkbox" />
                            </td>
                            <td>圆通</td>
                            <td>韩非</td>
                            <td>186*****897
                        </tr>
                        <tr>
                            <td>
                                <input type="checkbox" />
                            </td>
                            <td>中国邮政</td>
                            <td>卫庄</td>
                            <td>186*****897
                        </tr>
                    </tbody>
                </table>
            </div>

    这是html部分的,下面呢,我附上css部分的代码:

        * {
                    padding: 0;
                    margin: 0;
                }
                
                .wrap {
                    width: 300px;
                    margin: 100px auto 0;
                }
                
                table {
                    border-collapse: collapse;
                    border-spacing: 0;
                    border: 1px solid #c0c0c0;
                    width: 300px;
                }
                
                th,
                td {
                    border: 1px solid #d0d0d0;
                    color: #404060;
                    padding: 10px;
                }
                
                th {
                    background-color:rgb(51, 199, 18);
                    font: bold 16px "微软雅黑";
                    color: #fff;
                }
                
                td {
                    font: 14px "微软雅黑";
                }
                
                tbody tr {
                    background-color: #f0f0f0;
                }
                
                tbody tr:hover {
                    cursor: pointer;
                    background-color: #fafafa;
                }

    展示出来的布局是这样的:

    好了,下面我们就开始讲重点把,做之前的呢,一定要理清思路,只有理清思路的才能好下手做啊

    我们要通过点击第一个input标签来改变所有input标签的选择状态,

    1.首先要获取到控制总选择状态的input标签,我们命名为inputAll

    2.然后把每个input标签存到一个数组中去,我们命名为icheck

    3.点击inputAll来改变状态,并且让icheck里面的input能跟着他的状态来变化

    代码如下:

    window.onload = function() {
                    //先获得控制全选反选的input标签
                    var inputAll = document.getElementById("theadInp");
                    //获得tbody
                    var tbody = document.getElementById("tbody");
                    //获得天tbody里面的子元素
                    var icheck = tbody.getElementsByTagName("input");
                    console.log(icheck);
                    //给控制全选反选的input标签绑定事件
                    inputAll.onclick = function() {
                        //遍历tbody里面的input标签,把inputAll的状态赋值给icheck
                        for(var i = 0; i < icheck.length; i++) {
                            icheck[i].checked = this.checked;
                        }
                    }

    上面都有写注释,大家肯定都能看的懂的,也没难点,就不需要解释了。

    看下面:

    以为这样就结束了事了吗?然而并没有。里面还是有个小问题的,就是当下面的input有一个以上没选中的时候,那么inputAll的状态也必须要跟着变化,总不能只让人家听他一个人的话吧,这就太不像话了。

    for(var i = 0; i < icheck.length; i++) {
                        //给每个子元素都绑定事件
                        icheck[i].onclick = function() {
                            //点击的时候在遍历icheck,看看是否有没选中的
                            for(var j = 0; j < icheck.length; j++) {
                                //定义一个标志来记录
                                var flag = true;
                                if(icheck[j].checked == false) {
                                    flag = false;
                                }
                            }
                            inputAll.checked=flag;
                        }
                    }

    jq实现方法:

    是不是觉得js实现起来特别的繁琐,没关系,我们有更加简单的实现办法,那就jq来实现

    $(function() {
                    //实现全选反选
                    $("#theadInp").on('click', function() {
                        $("tbody input:checkbox").prop("checked", $(this).prop('checked'));
                    })
                    $("tbody input:checkbox").on('click', function() {
                        //当选中的长度等于checkbox的长度的时候,就让控制全选反选的checkbox设置为选中,否则就为未选中
                        if($("tbody input:checkbox").length === $("tbody input:checked").length) {
                            $("#theadInp").prop("checked", true);
                        } else {
                            $("#theadInp").prop("checked", false);
                        }
                    })
                })

    看,jq方法是不是简单的太多了,所以呢,能用jq就别人js实现了

  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/cythia/p/6663434.html
Copyright © 2011-2022 走看看