我正在尝试将事件侦听器添加到适当的html元素中。
var eventArray = [['scribbler', 'click', addNote], ['checkbox', 'change', strikethrough]];
for(var i=0;i<=eventArray.length; i++){
addEvents(eventArray[i][0], eventArray[i][1], eventArray[i][2]);
}
上述函数循环遍历提供的数组,并为addEvents
函数提供适当的参数。
function addEvents(className, event, fn){
var g = document.getElementsByClassName(className);
for(var i=0; i<=g.length; i++){
g[i].addEventListener(event, fn, false);
}
}
这是addEvents
循环中调用的for
函数。它适用于第一次贯穿,但之后的任何事情似乎都被忽略了。即scribbler / click事件监听器已正确应用,但复选框/更改一个不是。如果我颠倒了数组的顺序,那么正确应用的侦听器也会被翻转。
我已经尝试在g
函数末尾重置addEvents
变量,但这似乎不起作用。
document.getElementsByClassName(className).each.addEventListener(event, fn, false);
这似乎不是一个合适的解决方案。
答案 0 :(得分:1)
您应该使用<=
替换代码中的<
,因为您可能会收到Cannot read property addEventListener of undefined
这种变化的原因是,如果您的array
有3个元素,那么它们的索引是:0, 1, 2
,而array.length
是3
<=
您的循环将从0
迭代到3
,包含undefined