会javascript的大神们来看看这段代码 搞不懂this

上图是代码运行结果如下我的目的是要把旁边的按钮按下以后也变成黄色使用图中画横线的代码就报错替换成this就好了为什么!!... 上图是代码 运行结果如下 我的目的是要把旁边的按钮按下以后也变成黄色 使用图中画横线的代码就报错
替换成this就好了 为什么!!
展开
 我来答
xiangyuecn
2014-07-08 · TA获得超过336个赞
知道小有建树答主
回答量:408
采纳率:0%
帮助的人:308万
展开全部
因为i和aBtn定义在同一个地方,当onclick运行时,i=aBtn.length。
因此数组越界,aBtn[i]=undefined
改成this就正常了,因为onclick运行时,函数内的this对象就是点击的对象
更多追问追答
追问
对不起 没看懂 什么叫i和aBtn定义在同一个地方?为什么一运行i=aBtn.length?额。。。。新人刚学js 所以问题较多 望谅解
追答

运行的时候有点像这样:

onload=function(){
    var oDiv,aBtn,i;
    oDiv=...
    aBtn=...
    i=0;
    for(;i<aBtn.length;i++){
        
    }
    //最后i=aBtn.length
}
百度网友7234f06a
2014-07-14 · TA获得超过119个赞
知道答主
回答量:29
采纳率:0%
帮助的人:23.7万
展开全部
onclick 是事件函数,也就是说定义完毕后,你没点它它是不会执行的,然而定义完毕后,for循环中的i已经遍历到了最后1个,也就是 i = aBtn.length,显然这个i是没有的,所以aBtn[i] 就会数组越界。换成this就没有这个问题了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5e99258cf
2014-07-09 · TA获得超过1687个赞
知道大有可为答主
回答量:1299
采纳率:71%
帮助的人:695万
展开全部
THIS指的是当前点击的这个元素,而你用aBtn[i],就是想指向当前的元素吧~但是你忽略了一个问题,那就是这里的i已经和上面的不一样了~现在这个i是另一个元素了,已经不是你之前的那个i了,所以你用i它根本找不到对应的下标,也就没法设置css了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暮霭月色
2014-07-11
知道答主
回答量:38
采纳率:0%
帮助的人:9.5万
展开全部
因为for只是负责循环绑定click事件,不负责执行,当你点击出发执行onclick里面的内容时已经不再for里面了,所以找不到
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
薇and萌
2014-07-10 · TA获得超过116个赞
知道答主
回答量:35
采纳率:0%
帮助的人:38.3万
展开全部
你这个是绑定对象的click事件,你的方法没错,但在你点击input的时候,会执行你的方法体:
aBtn[i].className = "active",但这个时候你的对象里没有aBtn变量,也不存在i,所以要用this代替当前点击对象。希望能帮助你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式