【问题标题】:getElementsByClassName[i] returns undefinendgetElementsByClassName] 返回未定义
【发布时间】:2017-07-17 17:50:43
【问题描述】:

我有一些“预览”类的元素。我想让其中一个可点击,所以首先我想通过

找出它在 HTML 集合中的索引号
console.log(document.getElementsByClassName("preview"));

这确实返回了一个 HTML 集合,我可以在其中看到所需元素的索引号是 3。

现在我想为其分配一个事件侦听器,但它返回“无法将'addEventListener'分配给未定义”

document.getElementsByClassName("preview")[3].addEventListener("click","someFunction()")

【问题讨论】:

  • 您使用的是 0 基索引吗?
  • 你不需要使用""来调用一个函数。所以应该是 document.getElementsByClassName("preview")[3].addEventListener("click",someFunction())
  • 如果有3个元素,应该是.getElementsByClassName("preview")[2]而不是.getElementsByClassName("preview")[3]
  • 这个数字不应该是2吗?
  • 继续@AnamulHasan 的评论,声明事件处理程序时不需要括号。应该是document.getElementsByClassName("preview")[3].addEventListen‌​er("click",someFunct‌​ion)

标签: javascript html undefined addeventlistener nodelist


【解决方案1】:

如果只有类preview3 元素,则此集合的最后一个索引是2 而不是3,因为NodeList 集合是0 的索引,就像任何其他array 一样。

改变这个:

document.getElementsByClassName("preview")[3].addEventListener("click","someFunction()")

致以下:

document.getElementsByClassName("preview")[2].addEventListener("click",someFunction)

注意:

  • 请注意,我删除了包装回调函数的" " addEventListener,也去掉了两个括号,所以 附加事件侦听器时不会调用函数。
  • 确保在页面完全加载后调用您的代码。

【讨论】:

  • 做了完全相同的事情,控制台:script.js:7 Uncaught TypeError: Cannot read property 'addEventListener' of undefined at script.js:7
  • @SHCMostWanted 你能告诉我们你所有的相关代码吗?也许您在页面加载之前调用了代码。
  • 这正是问题所在,谢谢...解决了
猜你喜欢
  • 2017-10-24
  • 2022-01-03
  • 2013-07-18
  • 2013-01-08
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
相关资源
最近更新 更多