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

以下代码中 aBtn[i].style.background = 'red'; 为啥不能用oBtn[i] 替代 this

以下代码中 aBtn[i].style.background = 'red'; 为啥不能用oBtn[i] 替代 this

Chiong 2016-04-21 13:21:24
 <script>window.onload = function () { var aBtn = document.getElementsByTagName('input'); for(var i=0; i<aBtn.length; i++){ aBtn[i].onclick = function () { aBtn[i].style.background = 'red'; }; }};</script> 这句话中 aBtn[i].style.background = 'red'; 为啥不能用oBtn[i] 替代 this
查看完整描述

4 回答

已采纳
?
qq_青枣工作室_0

TA贡献446条经验 获得超754个赞

因为闭包,说起来就复杂了。

aBtn[i].onclick = function () {
   aBtn[i].style.background = 'red';
};

这个匿名function里面的变量 i 跟外层的 for(var i=0; i<aBtn.length; i++) 中的 i 是同一个。而且,这个i在for循环里自增到aBtn.length这个值了。然后,i就一直就是 aBtn.length 的值。

查看完整回答
3 反对 回复 2016-04-21
?
Chiong

TA贡献1条经验 获得超0个赞

将代码aBtn[i].style.background = 'red';改为 aBtn[i-1].style.background = 'red'; 以后,第三个按钮会变成红色, 所以i的值最后是3.  for 循环只是起到给每个btn加事件的效果. 点击这个事件触发时候for 已经循环完了, i的值是3, 那么就变成了aBtn[3]这个按钮变红,但是这个按钮并不存在,所以三个按钮没有一个有反应的. 但是改为i-1 后 .最后一个按钮就变红了.

end.3ku.all

查看完整回答
反对 回复 2016-04-21
?
zeusGOGOGO

TA贡献48条经验 获得超17个赞

循环体中只是定义了onclick的回调函数,并不会执行,当次循环体执行完时i===aBtn.length,所以不能使用。但是this关键字代表的是触发click事件的element,是正确的。如果你不想用this,我把代码改成如下,跟this效果是一样的:

for(var i=0; i<aBtn.length; i++){
var index = i;
aBtn[i].onclick = function (index) {
aBtn[index].style.background = 'red';
};

新加变量index只是为了让你更加明确。

更推荐你使用this

查看完整回答
反对 回复 2016-04-21
  • zeusGOGOGO
    zeusGOGOGO
    代码有误,,,不能这么写,这样写index值还是会变化。其实我是想表达标签索引必须暂存~
?
淡雅的默

TA贡献102条经验 获得超139个赞

你这里没有明确指定this是代表什么

如果这样$("input").click(funciton(){$(this)})

这个时候用this的时候,this就是代表点击input标签,但是你上面只是把input定义了变量,用this就会不知道是用什么this

查看完整回答
反对 回复 2016-04-21
  • 4 回答
  • 0 关注
  • 2174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信