为什么this替换成tr[i]就改变不了颜色?晕了,跪求指正。

来源:9-22 编程练习

Snail_N

2015-02-27 01:01

      window.onload = function(){              
     // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。
        var tr=document.getElementsByTagName("tr"); 
        var rowNum=tr.length;
tr[]
        for(var i=0;i<rowNum;i++){
           tr[i].onmouseover=function(){this.style.backgroundColor="#f2f2f2";}
           tr[i].onmouseout=function(){this.style.backgroundColor="#fff";} 
        }
    }

为什么不能用tr[i]代替this?

for循环里面的函数是window.onload那个函数的子函数,那么子函数应该可以从父函数哪里获取tr[i]的值吧。

看了好多答案,搞晕了,望指正,跪求!!!

写回答 关注

1回答

  • jf
    2015-02-27 09:53:03
    已采纳

    通过console 或 alert 进行调试,打印i的值就知道,for循环完毕时,i的值跟你要的索引是不一样的。


    window.onload = function(){
        // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。
        var tr=document.getElementsByTagName("tr");
        var rowNum=tr.length;
        for(var i=0;i<rowNum;i++){
    	tr[i].index = i;	//给当前对象添加属性记录索引值
    	tr[i].onmouseover=function(){
    		console.log(i);	//鼠标移入的时候,for循环已遍历完,i值不是你要的索引,而是rowNum 或 其他地方重新给i的赋值
    		tr[this.index].style.backgroundColor="#f2f2f2";
    	}
    	tr[i].onmouseout=function(){
    		tr[this.index].style.backgroundColor="#fff";
    	}
        }
    }


    chenbo...

    谢谢!

    2015-04-22 15:46:59

    共 3 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

467403 学习 · 21877 问题

查看课程

相似问题