无法读取未定义的属性“addEventListener”[关闭]

Posted

技术标签:

【中文标题】无法读取未定义的属性“addEventListener”[关闭]【英文标题】:Cannot read the property 'addEventListener' of undefined [closed] 【发布时间】:2021-04-17 17:44:15 【问题描述】:

我试图在您悬停时制作动画,如果您停止悬停,则强制动画完成,但问题是 javascript 代码告诉我有错误。

当我将 i <= elements.length; 更改为 i < elements.length; 时,它不会给我错误,但动画不起作用。

// FOOTER MAIL ANIMATION
const elements = document.getElementsByClassName(".mail");

for (let i = 0; i <= elements.length; i++) 
  elements[i].addEventListener("animationend", function (e) 
    elements[i].classList.remove("animated");
  );

  elements[i].addEventListener("mouseover", function (e) 
    elements[i].classList.add("animated");
  );
.mail 
  position: relative;
  left: 50%;
  transform: translate(-50%);
  margin-top: 25px;
  width: 300px;
  height: 60px;
  background-color: #008aff;
  border: none;
  overflow: hidden;


.mail a 
  position: relative;
  color: black;
  font-size: 20px;
  transition: 0.5s;


.mail i 
  position: relative;
  color: black;
  font-size: 30px;
  bottom: -3.5px;
  padding-left: 20px;


.mail.animated i 
  animation: correo 1s;


@keyframes correo 
  20% 
    transform: translate(-10px);
  
  80% 
    transform: translate(100px);
  
  81% 
    transform: translate(0, -50px);
  
          <button class="mail">
            <a href="mailto:" class="titulo">Enviar email <i class="far fa-envelope"></i></a>
          </button>
            <script src="https://kit.fontawesome.com/399548db15.js" crossorigin="anonymous"></script>

【问题讨论】:

这是一个错字,删除getElementsByClassName中邮件前的句点,在你的for循环中,使用不带等号的&lt; 使用i &lt;= elements.length; 时出现错误的原因是您应该改用i &lt;= elements.length -1;。假设您的数组有 3 个元素,因此 elements.length 将返回 3。最后一个循环中 i 的值将是 3,这是 elements 的无效索引,因为 elements[3] 不存在(未定义) )。在 Javascript 中,索引从零开始。 【参考方案1】:

使用getElementsByClassName时,不需要使用点。

你目前拥有的:

document.getElementsByClassName(".mail");

应该是什么:

document.getElementsByClassName("mail");

使用querySelector时只需要点

【讨论】:

我没有意识到,它现在可以工作但告诉我仍然有错误,我将i &lt;= elements 更改为i &lt; elements,现在可以正常工作了,谢谢!!!跨度>

以上是关于无法读取未定义的属性“addEventListener”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

`无法读取未定义的属性(读取'组件')`

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

使用地图时反应'无法读取未定义的属性'

如何使用自定义错误消息捕获“TypeError:无法读取未定义的属性(读取'0')”?

查询返回错误“无法读取未定义的属性(读取'节点')”

无法读取未定义的“已触及”属性