Javascript addEventListener 不是函数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/32151704/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
addEventListener is not a function
提问by Marc Andre Jiacarrini
hi i am trying to close the divs using the close click.. here is the code
嗨,我正在尝试使用关闭点击关闭 div .. 这是代码
var closeIcon=document.getElementsByClassName('.monique-close-icon');
function closeBigImgAndContainer()
{
MoniqueDiv.style.display= "none";
currentBigImageToDisplay.style.display="none";
};
closeIcon.addEventListener("click", closeBigImgAndContainer);
But in console there is an error Uncaught TypeError: closeIcon.addEventListener is not a function(anonymous function) @ main.js:14Please tell me where i am doing it wrong...Thanks.
但是在控制台中有一个错误 Uncaught TypeError: closeIcon.addEventListener is not a function(anonymous function) @ main.js:14请告诉我我哪里做错了...谢谢。
回答by syazdani
getElementsByClassName
returns an array of elements, addEventListener
exists on elements.
getElementsByClassName
返回一个元素数组,addEventListener
存在于元素上。
The fix would be to iterate over the result set from getElementsByClassName and call addEventListener on each item:
修复方法是迭代 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);
}
回答by MaxZoom
It looks like the closeIcon
variable has undefined value.
It is because getElementsByClassName(..)method takes the class
name as its parameter.
看起来closeIcon
变量具有未定义的值。
这是因为getElementsByClassName(..)方法将class
名称作为其参数。
You can try to fix it as below:
您可以尝试如下修复:
var closeIcons = document.getElementsByClassName('monique-close-icon');
var i = closeIcons.length;
while (i--)
closeIcons[i].addEventListener("click", closeBigImgAndContainer);
Also the method getElementsByClassName(..)returns a collection of nodes, not a single element. To assign an event listener we need to loop that collection and assign event to each DOM element in it.
此外,方法getElementsByClassName(..)返回节点集合,而不是单个元素。要分配事件侦听器,我们需要循环该集合并将事件分配给其中的每个 DOM 元素。
回答by idream1nC0de
Firstly, your selector is wrong. It should look like this:
首先,你的选择器是错误的。它应该是这样的:
var closeIcon = document.getElementsByClassName('monique-close-icon');
Then you need to append the event handlers as if you were dealing with an Array, as the .getElementsByClassName() method returns a collection of elements.
然后,您需要像处理数组一样附加事件处理程序,因为 .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);
}
Here's a working example: http://jsfiddle.net/vhe17shd/
这是一个工作示例:http: //jsfiddle.net/vhe17shd/