检验oButton[i].onclick事件

检验oButton[i].onclick事件

检验oButton[i].onclick事件时为什么alert(this.value)就能输出单击的值,alert(i)就不能输出相应的i?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
提问者 慕婉清707254 2019-11-25 15:39:00

但我点击它还是会显示21而不是undefine

  • 同学是在哪里输出的i呢?如果在function内使用到了console.log(i); 那么i就不是undefined了,而是21呢。如果其他位置都没有使用到i变量,那么i将不会被保留下来,成为undefined。祝学习愉快~
    2019-11-25 15:57:15
  • 提问者 慕婉清707254 回复 芝芝兰兰 #2
    var input=document.getElementsByTagName("input"); for(var i=0;i<input.length;i++){ input[i].onclick=function(){ alert(i); } }
    2019-11-25 16:14:29
  • 芝芝兰兰 回复 提问者 慕婉清707254 #3
    同学你好,同学这样也算是用到了i变量。所以在function内,i并不是undefined呢~这是正常的。祝学习愉快~
    2019-11-25 16:50:09
芝芝兰兰 2019-11-25 15:19:13

同学你好。

因为我们的onclick事件绑定在了oButton[i]元素上。那么onclick在这个绑定的函数中,this就代表了当前事件绑定的对象。

比如在源代码中增加如下语句:

5daadbbb0938dceb06180239.jpg

页面加载完时已经输出了如下,相当于有了0~20个fuction,每个fuction对应的元素都是当时的i对应的oButton[i]:

5daadb5e0960f28a04940745.jpg

执行完以上之后,也就是页面加载的过程中时候,i已经增加到21,i<oButton.length判断不成立,然后结束了for循环。i是for循环内的局部变量,所以在页面加载完成后再去访问,已经是undefined了。

http://img1.sycdn.imooc.com//climg/5ddb7f84099640e111350504.jpg

而当点击“1”按钮触发时,this对应的是触发的这个onclick事件绑定的元素,这个元素并没有消失,也即是当初的oButton[i]:

5daadc7f09f4d4ee12390630.jpg


如果解答了同学的疑问,望采纳~

祝学习愉快~


  • 提问者 慕婉清707254 #1
    前面是理解了,但我点击它还是会输出一个数21而不是undefined
    2019-11-25 15:43:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师