老师,我有问题
相关代码:
// 点击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来指定当前触发对象吗?
11
收起
正在回答 回答被采纳积分+1
2回答
好帮手慕慕子
2021-02-04 09:53:25
同学你好,对于你的问题解答如下:
this不等价于dots[d],可以打印下查看结果,示例:
this指向的当前被点击的小圆点,而dots[d]打印结果为undefined,如下图所示:
由上面的测试结果可知,dots[d]结果为undefined,所以使用dots[d].id出现报错。
原因是:在for循环中,是先依次给小圆点绑定点击事件,当点击小圆点的时候,才会执行点击事件。所以此时的for循环已经执行完毕,i值是3,可以输出看下:
也就是说每次点击的时候,d的值都是3,但是找不到dots[3]这个元素,所以无法使用dots[d]实现效果,建议this获取每次点击的小圆点
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星