for循环中的Addeventlistener可以工作,但调试器向我抛出一个未捕获的TypeError:无法读取属性&#

Addeventlistener in for loop works, but debugger throws me an uncaught TypeError: Cannot read property 'addEventListener' of undefined

本文关键字:一个 TypeError 属性 读取 工作 Addeventlistener 循环 调试器 for      更新时间:2023-09-26

所以我的代码可以随心所欲地工作,但大多数(IE除外)调试器都会给我这个错误:

未捕获的TypeError:无法读取未定义的属性"addEventListener"

这是代码:

//Get all elements with the class 'order' and attach eventlisteners
var products=document.getElementsByClassName('order');
for (i=0; i<=products.length; i++){ 
if (products) {
    products[i].addEventListener('keyup', delegate(), false);
    products[i].addEventListener('click', delegate(), false);
    };
}
function delegate(){
    return function(){
        ch();
    }
}

此代码在窗口中。卸载!我不太担心这个错误,因为我的代码运行得很好。我还是一名初级程序员,我真的很想了解为什么会发生这种情况。此外,我尝试过闭包,它们确实有效,但错误仍然存在。因此,请不要参考任何javascript闭包文章!

我的问题是:我的代码是否有错,或者调试器是否敏感?

提前谢谢。

在上次迭代过程中抛出错误。如果products.length为8(例如),则有效索引为0到7。您的代码还使用8作为索引。您必须排除最后一个。只需更新for以迭代到i<products.length而不是i<=products.length

//Get all elements with the class 'order' and attach eventlisteners
var products=document.getElementsByClassName('order');
for (i=0; i<products.length; i++){ 
if (products) {
    products[i].addEventListener('keyup', delegate(), false);
    products[i].addEventListener('click', delegate(), false);
    };
}
function delegate(){
    return function(){
        ch();
    }
}