JS鼠标移动换色表格行变色

点击按钮控制表格是否开启鼠标经过隔行换色,代码如下:

<!DOCTYPE html>
<html lang="cmn-hans">
<head>
    <meta charset="utf-8">
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
    <meta name=renderer content=webkit>
    <!-- some meta tags, important for SEO"-->
    <meta name="description" content="put a short description in here" />
    <meta name="keywords" content="put your important keywords in here" />
    <title>1.表格应用:隔行变色、移入变色-Javascript005-表格应用、提取、添加、删除
    </title>
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css">
    <script type="text/javascript">
    window.onload = function() {
        var table = document.getElementsByTagName('table')[0];
        var btn = document.getElementsByTagName('button');
        btn[0].onclick = function() { //老方法提取内容
            var lisi = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[1].getElementsByTagName('td')[1].innerHTML;
            alert(lisi);
        };
        btn[1].onclick = function() { //新方法提取内容
            //tBodies 集合返回表格 <tbody> 元素的集合。
            //rows 集合返回表格中所有行(TableRow 对象)的一个数组,即一个 HTMLCollection。该集合包括 <thead>、<tfoot> 和 <tbody> 中定义的所有行。
            //cells 集合返回表格中所有 <td> 或 <th> 元素。
            var zhangsan = table.tBodies[0].rows[0].cells[1].innerHTML;
            alert(zhangsan);
        };
        btn[2].onclick = function() { //开启关闭隔行变色
            if (btn[2].innerHTML == '开启隔行变色') {
                table.setAttribute('class', 'table table-bordered table-striped');
                btn[2].style.background = 'red';
                btn[2].innerHTML = '关闭隔行变色';
            } else {
                table.setAttribute('class', 'table table-bordered');
                btn[2].style.background = '#5bc0de';
                btn[2].innerHTML = '开启隔行变色';
            }
        };
        btn[3].onclick = function() { //开启关闭移入变色
            if (btn[3].innerHTML == '开启移入变色') {
                btn[3].style.background = 'red';
                btn[3].innerHTML = '关闭移入变色';
                for (var i = 0; i < table.tBodies[0].rows.length; i++) {
                            table.tBodies[0].rows[i].onmouseover=function(){
                                  this.style.background='yellow';  
                            };
                                 table.tBodies[0].rows[i].onmouseout=function(){
                                  this.style.background='';  
                            }
                }
            } else if(btn[3].innerHTML == '关闭移入变色'){
                btn[3].style.background = '#5bc0de';
                btn[3].innerHTML = '开启移入变色';
            }
        }
    }
    </script>
</head>
<body>
    <p>表格应用:隔行变色、移入变色</p>
    <p>
        <button type="button" class="btn btn-info">老方法提取“李四”单元格</button>
        <button type="button" class="btn btn-info">新方法提取“张三”单元格</button>
        <button type="button" class="btn btn-info">开启隔行变色</button>
        <button type="button" class="btn btn-info">开启移入变色</button>
    </p>
    <div class="container">
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>姓名</th>
                    <th>年龄</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>1</td>
                    <td>张三</td>
                    <td>33</td>
                </tr>
                <tr>
                    <td>2</td>
                    <td>李四</td>
                    <td>44</td>
                </tr>
                <tr>
                    <td>3</td>
                    <td>王五</td>
                    <td>55</td>
                </tr>
                <tr>
                    <td>4</td>
                    <td>赵六</td>
                    <td>66</td>
                </tr>
                <tr>
                    <td>5</td>
                    <td>homejoy</td>
                    <td>33</td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
</html>

为什么,我的代码点击关闭之后,依然是鼠标经过可以变色?

阅读 4.4k
5 个回答

你没有将 onmouseover onmouseout 事件清除

  } else if(btn[3].innerHTML == '关闭移入变色'){
                    btn[3].style.background = '#5bc0de';
                    btn[3].innerHTML = '开启移入变色';
                    for (var i = 0; i < table.tBodies[0].rows.length; i++) {
                        table.tBodies[0].rows[i].onmouseover=undefined;
                        table.tBodies[0].rows[i].onmouseout=undefined;
                    }
                }

这样就可以了
图片描述

因为onmouseover事件,onmouseout事件已经绑定上去了,你并没有把它消去啊

table.tBodies[0].rows[i].onmouseover=function(){
                                  this.style.background='yellow';  
                            };

因为你绑定了匿名事件,切换的时候,要取消绑定事件。

将onmouseover onmouseout 的绑定事件取消。就行。

绑定事件就会一直存在,除非你清除事件

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题