2015-08-22 47 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/

相关问题