javascript有时为什么一定要用this?如以下例子。

window.onload=function(){varbut=document.getElementsByTagName('input')for(i=0;i<but.l... window.onload=function()
{
var but=document.getElementsByTagName('input')
for(i=0;i<but.length;i++)
{
but[i].onclick=function()
{
this.className='aaa';
};
};
};
是点以下按钮,就换按钮样式的效果,第六行这里为什么用this可以,用but[i]却不可以呢??它们不都是指被点击的按钮吗?
不是第6行,是第8行那个this
展开
 我来答
百度网友5ec5394
2013-01-16 · TA获得超过119个赞
知道答主
回答量:175
采纳率:0%
帮助的人:92.8万
展开全部
用this就是指onclick事件的主体

but[i].onclick=function()
{
but[i].className='aaa';
};
这里的i 会变化
第一次执行
but[0].onclick=function()
{
but[i].className='aaa';
};此时i为0
执行到第二次时,第一个input
but[0].onclick=function()
{
but[i].className='aaa';
};
i变成1
事件为第二个input改变样式
执行完毕后所有的input事件都是最后一个input改变样式
molaifeng
2013-01-16 · TA获得超过5273个赞
知道大有可为答主
回答量:1629
采纳率:50%
帮助的人:1794万
展开全部
but[i].onclick=function()
{
this.className='aaa'; //这样写是对的,this代表了当前的点击的对象
};

but[i].onclick=function()
{
but[i].className='aaa'; //这样写会报错,TypeError: but[i] is undefined
};

因为在匿名函数内找不到but[i],这是因为在上下文中没有对but[i]进行声明,在循环体内简单修改下代码

var buts = but[i]; //把but[i]赋值给bugs,那么在匿名函数内就可以用了
buts.onclick=function()
{
buts.className='aaa';
};

不过里面用this还是好些,因为用了上面的,那么如果你有好几个input框的话,结果只有最后的input的css起作用
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
IT小墨
2013-01-16 · 专注IT技术改革,致力于改革创新
IT小墨
采纳数:18 获赞数:37

向TA提问 私信TA
展开全部
but[i]代表的是input,而这里的this代表的是body,所以不一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者AHLhc224hw
2013-01-16 · TA获得超过947个赞
知道小有建树答主
回答量:751
采纳率:0%
帮助的人:316万
展开全部
不是一定要用this,但像你这种情况当有多个input标签时,循环后 but[i]是可变的。
比如说有A 、 B 两个按钮 ,当循环后最终but[i]的值 B按钮
追问
但是我这个例子,改用but[i].className='aaa';  而不用this,为什么不行呢,它们不是指同一个对象吗
追答
你可以在那句代码上面alert( i ) , 看一下 i 是多少 ,
因为最终循环后 i = 2 ,当点击其中任意一个元素时调用的都是
but[ 2 ].className ='aaaa' , 而 but的长度为2 最大下标为1所以点击后会报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
971389462
2013-01-16 · TA获得超过818个赞
知道小有建树答主
回答量:231
采纳率:0%
帮助的人:177万
展开全部
你这个循环后but[i].className='aaa'; but[i]是指最后一个对象即第i个对象,不是你点击的那个对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式