2016-11-17 61 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

相關問題