2016-11-17 52 views
0

我正试图添加事件监听器到适当的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事件侦听器已正确应用,但复选框/更改一个不是。如果我颠倒数组的顺序,那么正确应用的侦听器也会翻转。

我试图在addEvents函数的末尾努力重置g变量,但这似乎不起作用。

document.getElementsByClassName(className).each.addEventListener(event, fn, false);

这似乎不是一个合适的解决方案。

回答

1

你应该<取代<=在你的代码,你很可能越来越像Cannot read property addEventListener of undefined

一些错误对这种变化的原因是,如果你array了,让我们说,3个元素,它们的指标为:0, 1, 2,和array.length3

<=你的循环将遍历从03包容性,让您undefined

+0

因此,我通过一次迭代超调我的NodeList,导致第二次调用不发生?编辑:你的编辑回答了这个问题,谢谢。 – RM3

+0

或多或少,你应该看看你的浏览器的控制台来获取更多信息 – pwolaq