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 展开
{
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 展开
6个回答
展开全部
用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改变样式
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改变样式
展开全部
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起作用
{
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起作用
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
but[i]代表的是input,而这里的this代表的是body,所以不一样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是一定要用this,但像你这种情况当有多个input标签时,循环后 but[i]是可变的。
比如说有A 、 B 两个按钮 ,当循环后最终but[i]的值 B按钮
比如说有A 、 B 两个按钮 ,当循环后最终but[i]的值 B按钮
追问
但是我这个例子,改用but[i].className='aaa'; 而不用this,为什么不行呢,它们不是指同一个对象吗
追答
你可以在那句代码上面alert( i ) , 看一下 i 是多少 ,
因为最终循环后 i = 2 ,当点击其中任意一个元素时调用的都是
but[ 2 ].className ='aaaa' , 而 but的长度为2 最大下标为1所以点击后会报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个循环后but[i].className='aaa'; but[i]是指最后一个对象即第i个对象,不是你点击的那个对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询