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

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

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

老夫不是宠物 2017-03-01 00:30:38
<!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]吗?
查看完整描述

2 回答

已采纳
?
Caballarii

TA贡献1123条经验 获得超629个赞

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

查看完整回答
反对 回复 2017-03-01
?
一杯2块的奶茶

TA贡献226条经验 获得超75个赞

循环里触发事件时i已经是最后的那个值了,所以要存起来或者用闭包之类的才能取到当前的i。

查看完整回答
反对 回复 2017-03-01
  • 2 回答
  • 0 关注
  • 1498 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信