请问,下面这段代码中this换成oTd[i]怎么就出问题了?什么原理呢?
for (i=0;i<oTd.length;i++){
oTd[i].onclick=function(){
var oParent=this.parentNode;
oParent.style.backgroundColor="red";
请问,下面这段代码中this换成oTd[i]怎么就出问题了?什么原理呢?
for (i=0;i<oTd.length;i++){
oTd[i].onclick=function(){
var oParent=this.parentNode;
oParent.style.backgroundColor="red";
因为你需要在事件内使用事件外的循环变量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);
}
}