2015-08-22 42 views
1

你好我想用點擊關閉,關閉的div .. 這裏是代碼的addEventListener不是函數

var closeIcon=document.getElementsByClassName('.monique-close-icon'); 

    function closeBigImgAndContainer() 
{ 
    MoniqueDiv.style.display= "none"; 
    currentBigImageToDisplay.style.display="none"; 
}; 

closeIcon.addEventListener("click", closeBigImgAndContainer); 

但在控制檯有錯誤 遺漏的類型錯誤:closeIcon.addEventListener是不是函數(匿名函數)@main.js:14 請告訴我我在哪裏做錯了......謝謝。

+0

請參閱本搗鼓你正在試圖做什麼工作的例子。 http://jsfiddle.net/vhe17shd/ –

回答

3

getElementsByClassName返回元素數組,addEventListener存在於元素上。

的解決將是遍歷結果從getElementsByClassName方法設置和調用addEventListener在每個項目:

var closeIcons=document.getElementsByClassName('.monique-close-icon'); 

function closeBigImgAndContainer() 
{ 
    MoniqueDiv.style.display= "none"; 
    currentBigImageToDisplay.style.display="none"; 
}; 

for (i = 0; i < closeIcons.length; i++) { 
    closeIcons[i].addEventListener("click", closeBigImgAndContainer); 
} 
+1

除了你的回答,選擇器也是錯誤的。 –

+0

@Syadani我加了和id,它的工作。謝謝。, –

+1

技術上它返回一個類似數組的集合。 – j08691

1

它看起來像closeIcon是不確定的。 你可以嘗試如下修正:

var closeIcons = document.getElementsByClassName('monique-close-icon'); 
var i = closeIcons.length; 
while (i--) 
    closeIcons[i].addEventListener("click", closeBigImgAndContainer); 

按照方法getElementsByClassName(..)文檔,它需要作爲參數的類名,並返回節點的集合。要分配事件監聽器,我們需要循環該集合並將事件分配給其中的每個元素。

+1

你說得對,選擇器是錯誤的,但問題是你不能在元素集合上調用addEventListener。 –

+1

如果他想將事件處理程序附加到所有元素上,該怎麼辦? –

+1

我相信他試圖用一種方法將所有元素添加到同一個事件監聽器中,這是不可能的,看看這個集合沒有這個名稱的方法。 –

1

首先,您的選擇器是錯誤的。它應該是這樣的:

var closeIcon = document.getElementsByClassName('monique-close-icon'); 

然後,你需要添加事件處理程序,如果你是處理數組,作爲.getElementsByClassName()方法返回元素的集合。

var closeIcon = document.getElementsByClassName('monique-close-icon'); 
function closeBigImgAndContainer(e) 
{ 
    MoniqueDiv.style.display= "none"; 
    currentBigImageToDisplay.style.display="none"; 
}; 

for (var i = 0; i < closeIcon.length; i++) { 
    closeIcon[i].addEventListener('click', closeBigImgAndContainer); 
} 

這裏有一個工作示例: http://jsfiddle.net/vhe17shd/

相關問題