<script>
var pic=document.querySelectorAll('li');
var tt=document.querySelectorAll('img');
for(var i=0; i<tt.length;i++){
tt[i].onclick = function() {
document.body.style.backgroundImage='url('+this.src+')';
}
}
</script>
为什么javascript中当this换为tt[i]的时候会报错
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 天际的海浪 2021-01-18 17:13关注
因为你需要在事件内使用事件外的循环变量i。
当事件触发时,那个循环早就结束了,那时的i的值已经是循环最大值加1了。
所以需要用一些方式保存住当前循环的i的值。
方案一:用闭包保存住当前循环的i的值for (var i = 0; i < arr.length; i++) {
(function(i){
arr[i].onclick = function () {
alert(i);
}
})(i);
}方案二:用let块作用域变量
for (var i = 0; i < arr.length; i++) {
let k = i;
arr[i].onclick = function () {
alert(k);
}
}
ps:IE11中在for语的()内声明的let是整个循环体中共用的,只有在{}内声明的let才是每次循环都独立的。
非ie的浏览器中可以在中在for语的()内声明let
for (let i = 0; i < arr.length; i++)方案三:为事件元素设置一个index属性,在事件函数内通过this获取当前对象并访问index属性。
for (var i = 0; i < arr.length; i++) {
arr[i].index = i;
arr[i].onclick = function () {
alert(this.index);
}
}
解决 无用评论 打赏 举报
悬赏问题
- ¥15 delta降尺度计算的一些细节,有偿
- ¥15 Arduino红外遥控代码有问题
- ¥15 数值计算离散正交多项式
- ¥30 数值计算均差系数编程
- ¥15 redis-full-check比较 两个集群的数据出错
- ¥15 Matlab编程问题
- ¥15 训练的多模态特征融合模型准确度很低怎么办
- ¥15 kylin启动报错log4j类冲突
- ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
- ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序