为什么这里使用tabletr[i]不行而this则可以呢?

<!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 tabletr=document.getElementsByTagName("tr");
         for(var i=0;i<tabletr.length;i++)
         {
             tabletr[i].onmouseover=function()
             {
                 tabletr[i].style.backgroundColor="red";
             }
             tabletr[i].onmouseout=function()
             {
                 tabletr[i].style.backgroundColor="#fff";
             }
         }

     }
 

  </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:;" >删除</a></td>   
       </tr>

       <tr>
        <td>xh002</td>
        <td>刘小芳</td>
        <td><a href="javascript:;" >删除</a></td>  
       </tr>  

       </table>
       <input type="button" value="添加一行"  />  
 </body>
</html>

以上为代码部分,但是在写这段代码的时候,无法得出预期结果,即鼠标经过的时候不触发事件。后来看到别人的代码,发现将tabletr[i].style.backgroundColor改为this.style.backgroundColor后就成功了。我想知道为什么在这里使用tabletr[i]不行而this则可以呢?还有这里的this代表的什么,难道不是代表的tabletr[i]吗?

老夫不是宠物
浏览 1468回答 2
2回答

Caballarii

绑定的时候执行完js代码,i已经是个固定值了(这里应该是3),真正到触发mouseover的时候,执行到tabletr[i]这句话的时候实际上就是tabletr[3],而不是你想要的那个i的值。this指当前绑定的对象,所以可以拿到想要的tr

一杯2块的奶茶

循环里触发事件时i已经是最后的那个值了,所以要存起来或者用闭包之类的才能取到当前的i。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript