Using Html+Javascript to realize the single selection and multiple selection of the table form

1. Effect diagram
1. insert image description here
2.insert image description here

2. Code (can be copied directly)

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

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

<body>
    <table class="multi-table" cellspacing="0" border>
            <thead>
                <tr>
                    <th> <input id="js-all-checkbox" type="checkbox" onclick="checkAll(this)"></th>
                    <th>序号</th>
                    <th>操作人</th>
                    <th>手机号码</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><input type="checkbox" name="select" value="1" oninput="clickCheckbox()"></td>
                    <td>1</td>
                    <td>张三</td>
                    <td>15278126625</td>
                </tr>
                <tr>
                    <td> <input type="checkbox" name="select" value="2" oninput="clickCheckbox()"></td>
                    <td>2</td>
                    <td>李四</td>
                    <td>15278126625</td>
                </tr>
                <tr>
                    <td><input type="checkbox" name="select" value="3" onclick="clickCheckbox()"></td>
                    <td>3</td>
                    <td>王五</td>
                    <td>15278126625</td>
                </tr>
            </tbody>
        </table>

    <h3>当前选中的是: <span id="js-check-text"></span></h3>
</body>

</html>



<script>
    let checkValues = [];

    function clickCheckbox(e) {
      
      
        //拿到所有选择的dom复选框
        let checkDomArr = document.querySelectorAll('.multi-table tbody input[type=checkbox]:checked');
        //拿到所有选择的dom复选框的值
        checkValues = [];
        for (let i = 0, len = checkDomArr.length; i < len; i++) {
      
      
            var checkobj = {
      
      }
            checkobj.id = checkDomArr[i].parentNode.parentNode.children[1].innerHTML
            checkobj.name = checkDomArr[i].parentNode.parentNode.children[2].innerHTML
            checkobj.age = checkDomArr[i].parentNode.parentNode.children[3].innerHTML
            checkValues.push(checkobj);
        }
        //更新当前选中的文本值
        updateText();
        //拿到所有的单选框dom
        let allCheckDomArr = document.querySelectorAll('.multi-table tbody input[type=checkbox]');
        console.log(allCheckDomArr, 'allcheckdom---------')
        //拿到复选框dom
        let allCheckbox = document.getElementById('js-all-checkbox');
        //遍历所有的单选框
        for (let i = 0, len = allCheckDomArr.length; i < len; i++) {
      
      
            //如果有一个单选框的check值为false,复选框都不能为true
            if (!allCheckDomArr[i].checked) {
      
      
                if (allCheckbox.checked) allCheckbox.checked = false;
                break;
            } else if (i === len - 1) {
      
      
                //否则 遍历到i=len-1的时候(即最后一项单选框了),任然不存在上种情况,说明单选框全部选中,此时复选框的checked值为true
                document.getElementById('js-all-checkbox').checked = true;
                return;
            }
        }
    }

    //复选功能
    function checkAll(current) {
      
      
        console.log(current, 'current-----------')
        //拿到所有的单选框
        let allCheckDomArr = document.querySelectorAll('.multi-table tbody input[type=checkbox]');
        //点击之后,如果复选框的checked值为false,说明没点击时为true,即是勾选状态,此时所有的单选框接下来应该为false
        if (!current.checked) {
      
       // 点击的时候, 状态已经修改, 所以没选中的时候状态时true
            checkValues = [];
            //遍历所有的单选框
            for (let i = 0, len = allCheckDomArr.length; i < len; i++) {
      
      
                //拿到当前遍历的单选框的checked值
                let checkStatus = allCheckDomArr[i].checked;
                //若为true(即选中状态),置为false
                if (checkStatus) allCheckDomArr[i].checked = false;
            }
        } else {
      
      
            //同理
            //如果复选框为true,那么所有的单选框都应该被勾选
            checkValues = [];
            for (let i = 0, len = allCheckDomArr.length; i < len; i++) {
      
      
                let checkStatus = allCheckDomArr[i].checked;
                if (!checkStatus) allCheckDomArr[i].checked = true;
                var checkobj = {
      
      }
                checkobj.id = allCheckDomArr[i].parentNode.parentNode.children[1].innerHTML
                checkobj.name = allCheckDomArr[i].parentNode.parentNode.children[2].innerHTML
                checkobj.age = allCheckDomArr[i].parentNode.parentNode.children[3].innerHTML
                checkValues.push(checkobj);
            }
        }
        //更新当前选中的文本值
        updateText();
    }

    function updateText() {
      
      
        document.getElementById('js-check-text').innerHTML = JSON.stringify(checkValues);
    }
</script>

Guess you like

Origin blog.csdn.net/qq_45791799/article/details/124589902
Recommended