84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
.为什么将以下代码中this,用sui[a]替换时,运行不出效果;
.代码如下
Title 按钮 按钮 按钮 按钮 按钮
人生最曼妙的风景,竟是内心的淡定与从容!
写个详细一点的- -
for (var a = 0; a < sui.length; a++) { sui[a].index = a; //将当前循环的a值保存为当前按钮的index sui[a].onclick = function() { for (var b = 0; b < sui.length; b++) { sui[b].className = ''; } cosole.log(a); sui[this.index].className = 'car'; }; }
console.log(a);你就会发现,a返回的都是最后循环结束的值,你这里就是5,然后你只有5个按钮,就是01234...所以代码无效。
sui[a].index = a可将每个循环的a的值存储到index,然后使用this.index调用,所以应该是sui[this.index]
或者你把最外层的for的var改为let也行,这个写tab选项卡、轮播的控件的时候你都会用得到。
最后你的问题,this是什么?
if (sui[this.index] === this) { console.log('true'); }
var sui=document.getElementsByTagName("button"); for(var a=0;a
但我不会告诉你为w什么。
典型的闭包问题,想深入理解的话自己多看书吧。
sui[a].onclick=function () { for(var b=0;b
最简单的解决方法是把for循环中的var换成let
for(let a=0;a
可以利用自定义属性保存正确的a值,或者利用闭包来保存。
写个详细一点的- -
console.log(a);你就会发现,a返回的都是最后循环结束的值,你这里就是5,然后你只有5个按钮,就是01234...所以代码无效。
sui[a].index = a可将每个循环的a的值存储到index,然后使用this.index调用,所以应该是sui[this.index]
或者你把最外层的for的var改为let也行,这个写tab选项卡、轮播的控件的时候你都会用得到。
最后你的问题,this是什么?
但我不会告诉你为w什么。
典型的闭包问题,想深入理解的话自己多看书吧。
最简单的解决方法是把for循环中的var换成let
可以利用自定义属性保存正确的a值,或者利用闭包来保存。