老师,我有问题

老师,我有问题

相关代码:

// 点击dots切换图片
for (var d = 0; d < dotsSize; d++) {
// 遍历给dots>span添加id,值为索引值
dots[d].id = d
addHandler(dots[d], 'click', function() {
alert(dots[d].id)
})
}

问题描述:

我想问一下为什么我尝试用alert(dots[d].id)的方法,会出现下面报错?


Uncaught TypeError: Cannot read property 'id' of undefined

    at HTMLSpanElement.<anonymous>

this不是相当于dots[d]吗?难道一定要用this来指定当前触发对象吗?

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

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

2回答
好帮手慕言 2021-02-05 19:21:12

同学你好,在同学的另一个提问中回复了,快去查看吧,链接:http://class.imooc.com/course/qadetail/276564,祝学习愉快~

好帮手慕慕子 2021-02-04 09:53:25

同学你好,对于你的问题解答如下:

​this不等价于dots[d],可以打印下查看结果,示例:

http://img1.sycdn.imooc.com//climg/601b524b09531c2008370315.jpg

this指向的当前被点击的小圆点,而dots[d]打印结果为undefined,如下图所示:

http://img1.sycdn.imooc.com//climg/601b5214094b530506450182.jpg

由上面的测试结果可知,dots[d]结果为undefined,所以使用dots[d].id出现报错。

原因是:在for循环中,是先依次给小圆点绑定点击事件,当点击小圆点的时候,才会执行点击事件。所以此时的for循环已经执行完毕,i值是3,可以输出看下:

http://img1.sycdn.imooc.com//climg/601b52d709d888d107970246.jpg

http://img1.sycdn.imooc.com//climg/601b52e209a472e104300151.jpg

也就是说每次点击的时候,d的值都是3,但是找不到dots[3]这个元素,所以无法使用dots[d]实现效果,建议this获取每次点击的小圆点

祝学习愉快~

  • 提问者 慕村6371425 #1

    老师,我觉得不是先依次给圆点绑定事件,而是因为在没有点击触发圆点的时候,d就已经递增到3了。

    2021-02-05 18:47:22
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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