事件侦听器仅分配给名为

时间:2016-11-17 20:44:48

标签: javascript jquery

我正在尝试将事件侦听器添加到适当的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);

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

1 个答案:

答案 0 :(得分:1)

您应该使用<=替换代码中的<,因为您可能会收到Cannot read property addEventListener of undefined

之类的错误

这种变化的原因是,如果您的array有3个元素,那么它们的索引是:0, 1, 2,而array.length3

<=您的循环将从0迭代到3,包含undefined