js中for循环获取到的值都是最后一个解决方法

有5个按钮:

<div>
        <button>按钮1</button>
        <button>按钮2</button>
        <button>按钮3</button>
        <button>按钮4</button>
        <button>按钮5</button>
 </div>

一、var定义变量的方法:

var btns=document.querySelectorAll('button');
for(var i = 0;i<btns.length;i++){
     btns[i].οnclick=function(){
         alert('点击了第'+i+'个按钮');     
     }
}  

    点击按钮后弹出的都是第4个,原因是var定义变量i作用域造成的。

解决方法:

(1)、let定义变量的方法:

let btns=document.querySelectorAll('button');
for(let i = 0;i<btns.length;i++){
     btns[i].οnclick=function(){
         alert('点击了第'+i+'个按钮');     
     }
}  

以上写法在IE浏览区不支持,其他的浏览器支持,点击按钮能取到需要的值。

(2)、var定义变量的方法:

var btns=document.querySelectorAll('button');
for(var i = 0;i<btns.length;i++){
     (function(i){
         btns[i].οnclick=function(){
             alert('点击了第'+i+'个按钮');     
         }
     })(i);
}  
以上写法支持IE浏览器
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误通常发生在尝试访问一个未定义或不存在的数组元素时。请确保在使用数组前,数组已经被正确地定义和初始化。还要检查循环的索引是否超出了数组的范围。 以下是一个常见的导致此错误的示例: ``` var arr = [1, 2, 3]; for (var i = 0; i <= arr.length; i++) { console.log(arr[i]); } ``` 在这个例子循环的条件是 `i <= arr.length`,但是数组最后一个元素的索引是 `arr.length - 1`,所以当 `i` 等于 `arr.length` 时,程序会尝试访问一个不存在的元素,从而导致错误。 为了解决此错误,请将循环条件更改为 `i < arr.length`。这将确保循环只在数组元素的索引范围内运行。 ### 回答2: 这个错误是因为在一个JavaScript的for循环,试图读取一个未定义的变量或对象的属性。当我们尝试访问一个不存在的属性时,会出现这个错误。 这个错误通常发生在以下几种情况下: 1. 数组越界:在遍历数组时,可能会超出数组的长度范围,例如尝试访问一个超过数组长度的索引。这会导致报错的原因是访问了一个不存在的索引位置的元素。 2. 对象属性不存在:在遍历对象的属性时,访问一个不存在的属性会导致报错。如果我们尝试访问对象的属性,在对象没有定义该属性时,会出现此错误。 解决此错误的方法有以下几种: 1. 确保循环索引或对象属性存在并且定义了,可以在进入循环之前使用条件语句进行检查。 2. 使用try-catch语句来捕获异常,处理错误情况。 3. 在循环之前初始化数组,并确保数组的每个元素都有一个有效的。 4. 在遍历对象属性之前,使用hasOwnProperty()方法检查属性是否存在。 总之,要解决这个错误,我们需要仔细检查循环数组和对象的变量和属性,确保它们都存在并具有有效的。 ### 回答3: 这个错误通常出现在 JavaScript 的 for 循环,它提示无法读取未定义的属性(reading '0')。一般情况下,这个错误是由于访问一个未定义或空数组或对象导致的。 通常,我们在使用 for 循环遍历一个数组时,会使用一个索引变量(通常是 i)来访问数组的每个元素。当出现这个错误时,表明数组可能是空的或者未定义。 为了解决这个问题,我们可以在使用 for 循环之前,先检查数组是否为 undefined 或为空。 例如: ```javascript var array = [1, 2, 3]; for (var i = 0; i < array.length; i++) { console.log(array[i]); } ``` 在上面的例子,我们通过 array.length 来获取数组的长度,保证了循环可以正确的迭代数组,并打印出每个元素。 另外,我们也可以使用 Array.isArray() 方法来检查一个变量是否是一个数组。 例如: ```javascript var array = undefined; if (Array.isArray(array) && array.length > 0) { for (var i = 0; i < array.length; i++) { console.log(array[i]); } } else { console.log("数组为空或未定义!"); } ``` 上面的例子,我们首先检查 array 是否是一个数组,并且长度大于0,只有在条件满足时才会执行循环。否则,会输出"数组为空或未定义!"。 总之,要解决 "Cannot read properties of undefined (reading '0')" 的错误,我们需要在使用 for 循环之前,确保数组已经定义并且不为空。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值