为了账号安全,请及时绑定邮箱和手机立即绑定

添加事件后,为什么没反应??

 window.onload = function(){

                  

     // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。

        var Trs=document.getElementsByTagName("tr");

        

        for(var i=1;i<Trs.length;i++){

             

             Trs[i].onmouseover=function(){

                Trs[i].style.backgroundColor="#f2f2f2"; 

             }

             

             Trs[i].onmouseout=function(){

                Trs[i].style.backgroundColor="#fff"; 

             }

         }  

}


正在回答

4 回答

不好意思,没看见回复,是这样的,你的window.onload函数缺了一个大括号,还有,最好是把这些函数直接写在script标签中,不要写在window.onload里面,因为del和add是在html标签里面的,当程序执行到这里的时候,如果函数在window.onload里面,html标签是获取不到这个事件的,你这个程序就只是一个大括号位置的问题,至于如何在给新添加的tr添加onmouseout和onmouseover里面

<!DOCTYPE html>

<html>
 <head>
  <title> new document </title>  
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>   
  <script type="text/javascript"> 
  
      window.onload = function(){
                 

         
        var Trs=document.getElementsByTagName("tr");
         for(let i=1;i<Trs.length;i++){
             //没反应
             Trs[i].onmouseover=function(){
                Trs[i].style.backgroundColor="#f2f2f2"; 
             }
             
             Trs[i].onmouseout=function(){
                Trs[i].style.backgroundColor="#fff"; 
             }
         } 
         
 
     
      // 编写一个函数,供添加按钮调用,动态在表格的最后一行添加子节点;
      
      
   
     // 创建删除函数
   
      }
      function del(obj){
         obj.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode);
      };
      var i=2;
      function add(obj){
          var tr=document.createElement("tr");
          var td1=document.createElement("td");
          var td2=document.createElement("td");
          var td3=document.createElement("td");
          var tab=document.getElementById("table");
          i++;
          td1.innerHTML="xh00"+i;
          td2.innerHTML="第"+i+"位同学";
          td3.innerHTML="<a href='javascript:;' onclick='del(this)' >删除</a>";
          tab.appendChild(tr);
          tr.appendChild(td1);
          tr.appendChild(td2);
          tr.appendChild(td3);
          
      }
  </script> 
 </head> 
 <body> 
  <table border="1" width="50%" id="table">
  <tr>
<th>学号</th>
<th>姓名</th>
<th>操作</th>
  </tr>  

  <tr>
<td>xh001</td>
<td>王小明</td>
<td><a href="javascript:;" onclick="del(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->
  </tr>

  <tr>
<td>xh002</td>
<td>刘小芳</td>
<td><a href="javascript:;" onclick="del(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->
  </tr>  

  </table>
  <input type="button" value="添加一行" onclick="add(this)"/>  
 </body>
</html>


1 回复 有任何疑惑可以回复我~
#1

木槿111 提问者

运行没效果?_?
2017-06-08 回复 有任何疑惑可以回复我~
#2

慕勒7123956 回复 木槿111 提问者

正常运行啊,怎么会没效果,试试别的浏览器吧
2017-06-09 回复 有任何疑惑可以回复我~
#3

木槿111 提问者 回复 慕勒7123956

嗯,用gooogle就可以了
2017-06-12 回复 有任何疑惑可以回复我~

<!DOCTYPE html>


<html>

 <head>

  <title> new document </title>  

  <meta http-equiv="Content-Type" content="text/html; charset=gbk"/>   

  <script type="text/javascript"> 

  

      window.onload = function(){

                 

       /* var Trs=document.getElementsByTagName("tr");

        

        for(var i=1;i<Trs.length;i++){

             

             change(Trs[i]);

   }

    }

function change(obj){

    obj.onmouseover=function(){

                obj.style.backgroundColor="#f2f2f2"; 

             }

             

         obj.onmouseout=function(){

                obj.style.backgroundColor="#fff"; 

             }

    }  *///这样写就可以

         

         

        var Trs=document.getElementsByTagName("tr");

         for(let i=1;i<Trs.length;i++){

             //没反应

             Trs[i].onmouseover=function(){

                Trs[i].style.backgroundColor="#f2f2f2"; 

             }

             

             Trs[i].onmouseout=function(){

                Trs[i].style.backgroundColor="#fff"; 

             }

         } 

         

 

     

      // 编写一个函数,供添加按钮调用,动态在表格的最后一行添加子节点;

      var i=2;

      function add(obj){

          var tr=document.createElement("tr");

          var td1=document.createElement("td");

          var td2=document.createElement("td");

          var td3=document.createElement("td");

          var tab=document.getElementById("table");

          i++;

          td1.innerHTML="xh00"+i;

          td2.innerHTML="第"+i+"位同学";

          td3.innerHTML="<a href='javascript:;' onclick='del(this)' >删除</a>";

          tab.appendChild(tr);

          tr.appendChild(td1);

          tr.appendChild(td2);

          tr.appendChild(td3);

          

      }

   

     // 创建删除函数

      function del(obj){

         obj.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode);

      }

  </script> 

 </head> 

 <body> 

  <table border="1" width="50%" id="table">

  <tr>

<th>学号</th>

<th>姓名</th>

<th>操作</th>

  </tr>  


  <tr>

<td>xh001</td>

<td>王小明</td>

<td><a href="javascript:;" onclick="del(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->

  </tr>


  <tr>

<td>xh002</td>

<td>刘小芳</td>

<td><a href="javascript:;" onclick="del(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->

  </tr>  


  </table>

  <input type="button" value="添加一行"  onclick="add(this)"/>   <!--在添加按钮上添加点击事件  -->

 </body>

</html>


0 回复 有任何疑惑可以回复我~

"当这个程序运行的时候,循环已经完成,"??能解析一下吗


0 回复 有任何疑惑可以回复我~
#1

慕勒7123956

当鼠标划过tr,也就是你的这个onmouseover或者onmouseout函数开始执行的时候,你的for循环是已经完成的了,这时候的i是比整个数组还要大1的,当你的函数执行的时候,获得的i就是一个比数组长度还大的值,这时候Trs[i]就是undefined的
2017-06-06 回复 有任何疑惑可以回复我~
#2

木槿111 提问者 回复 慕勒7123956

但是改了,还是不行,代码如下。先谢谢了。
2017-06-06 回复 有任何疑惑可以回复我~

因为你给它绑定的这个事件的时候,用到了i变量,但是当这个程序运行的时候,循环已经完成,这个i已经是比数组的长度大了,你可以简单的把for(var i=1;i<Trs.length;i++)改成for(let i=1;i<Trs.length;i++)

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

添加事件后,为什么没反应??

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信