如何为 html 集合中的每个元素添加事件侦听器?
How do I add an event listener to each element in an html collection?
function eventAdded(i) {
console.log(inputs[i]);
}
var inputs = document.querySelectorAll('.js-capture__input input');
for (i = 0; i <= inputs.length; i++) {
console.log(inputs[i]);
inputs[i].addEventListener('change', eventAdded);
}
我设法将每个 inputs[i]
记录到控制台。 inputs[i]
存在。
但我越来越
未捕获的类型错误:无法读取未定义的 属性 'addEventListener'
如果我可以将每个记录都记录到控制台,这怎么没有定义?
有人可以像我 5 岁一样解释一下吗?
如@CertainPerformance 所说,您的错误是 i <= inputs.length
而不是 i < inputs.length
。
不同之处在于,在第一种情况下,您将超出数组的边界。
例如,如果您有一个包含 5 个元素的数组(记住数组是从 0 开始的):
0
1
2
3
4
当您使用 i <= inputs.length
检查时,情况是这样的:
0 <= 5: true
1 <= 5: true
2 <= 5: true
3 <= 5: true
4 <= 5: true
5 <= 5: true
6 <= 5: false
所以不是迭代 5 次,而是迭代 6 次。最后一个 (i=5
) 不在数组边界内(其上限为 4
)。
function eventAdded(i) {
console.log(inputs[i]);
}
var inputs = document.querySelectorAll('.js-capture__input input');
for (var i = 0; i < inputs.length; i++) {
console.log(inputs[i]);
inputs[i].addEventListener('change', eventAdded);
}
function eventAdded(i) {
console.log(inputs[i]);
}
var inputs = document.querySelectorAll('.js-capture__input input');
for (i = 0; i <= inputs.length; i++) {
console.log(inputs[i]);
inputs[i].addEventListener('change', eventAdded);
}
我设法将每个 inputs[i]
记录到控制台。 inputs[i]
存在。
但我越来越
未捕获的类型错误:无法读取未定义的 属性 'addEventListener'
如果我可以将每个记录都记录到控制台,这怎么没有定义? 有人可以像我 5 岁一样解释一下吗?
如@CertainPerformance 所说,您的错误是 i <= inputs.length
而不是 i < inputs.length
。
不同之处在于,在第一种情况下,您将超出数组的边界。
例如,如果您有一个包含 5 个元素的数组(记住数组是从 0 开始的):
0
1
2
3
4
当您使用 i <= inputs.length
检查时,情况是这样的:
0 <= 5: true
1 <= 5: true
2 <= 5: true
3 <= 5: true
4 <= 5: true
5 <= 5: true
6 <= 5: false
所以不是迭代 5 次,而是迭代 6 次。最后一个 (i=5
) 不在数组边界内(其上限为 4
)。
function eventAdded(i) {
console.log(inputs[i]);
}
var inputs = document.querySelectorAll('.js-capture__input input');
for (var i = 0; i < inputs.length; i++) {
console.log(inputs[i]);
inputs[i].addEventListener('change', eventAdded);
}