我遇到addEventListener()
函數的問題。我試圖建立一個基於數組的變量的菜單(我不會解釋爲什麼這樣設置)。事件監聽器不在循環中工作
下面是代碼:
var _Dirt = document.getElementById("dirt");
_Dirt.addEventListener('mouseover', function() { menuOver(true, this, _dirtY); }, false);
_Dirt.addEventListener('mouseout', function() { menuOver(false, this, _dirtY); }, true);
var _DirtDiv = _Dirt.getElementsByTagName('div')[0];
for (nLink in Men["dirt"]) {
var _lnk = document.createElement('p');
_lnk.className = 'menu';
_lnk.innerHTML = Men["dirt"][nLink][0];
_lnk.addEventListener('click', menuLoop(Men["dirt"][nLink][1]), false);
_DirtDiv.appendChild(_lnk);
_DirtDiv.innerHTML+= '<br />';
}
這裏是menuLoop功能(如果你擔心,我沒有正確綁定變量權:
function menuLoop (n) {
return function() {
menuLink (n);
}
}
現在,惱人的部分是事件監聽器在_Dirt
元素上工作正常,但是根本沒有在_lnk
元素上,即使當我將其更改爲_lnk.onclick = function() { //something }
時,它也不起作用(事實上,onclick
屬性不會起作用小號如何在DOM中)。
我有另外一個循環函數,它也將一個事件監聽器附加到一個元素上,並且這個函數完全正常......而且代碼非常相似。令人沮喪的是,這段代碼完美無缺地工作。我甚至不記得對這段代碼做任何修改。我試圖在代碼中隔離這個函數,看看腳本中是否有斷點,但問題仍然存在。
如果您需要我的代碼的任何其他部分,請讓我知道。
有你嘗試只是傳遞一個硬編碼的'function(){alert('boom!');}'而不是'menuLoop(Men [「dirt」] [nLink] [1])'火災? – Yaniro 2012-03-13 18:19:39
*「onclick'屬性甚至不會顯示」*這是因爲您沒有添加屬性。您正在直接使用DOM及其事件系統。 – 2012-03-13 18:29:54
@Yaniro:是的,我已經嘗試過。徒勞無功。我不是:我指的是當我添加一個onclick事件。我知道在添加事件偵聽器時,它不會顯示在DOM中。 – 2012-03-13 18:33:08