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

怎么让第二个this指向oLi[i]呢。熟悉this的还望指示

        window.onload=function()
        {
            var oLi=document.getElementsByTagName('li');
            for(var i=0,l=oLi.length;i<l;i++)
            {
                oLi[i].timer=null;
                oLi[i].speed=0;
                oLi[i].icur=0;               
                oLi[i].onmouseover=function()
                {
                    startmove(this,'width',400,function()
                        {
                            startmove(this,'height',200);//就是这个this,换做oLi[i]也不行。
                        });
                }
            }
        }

正在回答

4 回答

你之前在里面的函数中的this是指向外层的startmove的,所以直接写this是取不到obj本身的,而外层的this是指向obj本身,把这个this存到一个变量里,作为参数传到里面的函数就可以了

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

Fish28

恍然大悟啊 谢啦!!!!
2016-12-19 回复 有任何疑惑可以回复我~
#2

Alfen 回复 Fish28

不客气
2016-12-19 回复 有任何疑惑可以回复我~
#3

桃太郎 提问者

非常感谢!
2016-12-19 回复 有任何疑惑可以回复我~

this是  函数在作为方法被调用时所处的对象

第一个startMove被调用时  在Li1.onmouseover(){}中   于是this为Li1

但是   第二个被调用时 你如果用this    所处的对象就不是Li1了

所以第一个动作执行完  Li1就不会动


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

window.onload = function () {

var oLi = document.getElementsByTagName('li');

for (var i = 0, l = oLi.length; i < l; i++) {

oLi[i].timer = null;

oLi[i].speed = 0;

oLi[i].icur = 0;

oLi[i].onmouseover = function () {

var that = this;

startmove(this, 'width', 400, function () {

startmove(that, 'height', 200); //就是这个this,换做oLi[i]也不行。

});

}

}

}

//写错了,是这样子


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

Fish28

厉害了朋友,确实可以,能讲讲为什么?????
2016-12-19 回复 有任何疑惑可以回复我~

window.onload = function () {

var oLi = document.getElementsByTagName('li');

for (var i = 0, l = oLi.length; i < l; i++) {

oLi[i].timer = null;

oLi[i].speed = 0;

oLi[i].icur = 0;

oLi[i].onmouseover = function () {

startmove(this, 'width', 400, function () {

var that = this;

startmove(that, 'height', 200); //就是这个this,换做oLi[i]也不行。

});

}

}

}

//随便写的没试验,你试试


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

举报

0/150
提交
取消

怎么让第二个this指向oLi[i]呢。熟悉this的还望指示

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