首页 > 解决方案 > 未捕获的类型错误:无法读取我的 JS 文件中未定义错误的属性“addEventListener”

问题描述

    <div class="card-body">
                <hr>
                <h5 class="card-title" id = "tasks-title">Todo's</h5>
                <div class="form-row">
                        <div class="form-group col-md-6">
                            <input class="form-control" type="text" name="filter" id = "filter" placeholder="Search A Todo">
                        </div>
                </div>
  <div>

我在顶部给出了我的 HTML 代码。JS代码在下面:

const cardBody = document.querySelectorAll(".card-body")[2];

const title = document.querySelector("#tasks-title");

cardBody.addEventListener("mouseenter",run);
cardBody.addEventListener("mouseleave", run);

function run(e) {
 console.log(e.type);}

在这种情况下,当我将鼠标悬停在 cardBody 元素上时,输出必须写为“mouseenter”。当我用鼠标离开时,输出必须“鼠标悬停”。但是,我收到一个错误 Uncaught TypeError: Cannot read property 'addEventListener' of undefined。我到处搜索这个问题,但没有解决我的错误。

标签: javascriptdomdom-events

解决方案


只有一个元素具有类名card-body。所以你应该指出document.querySelectorAll(".card-body")[0]

const cardBody = document.querySelectorAll(".card-body")[0];

const title = document.querySelector("#tasks-title");

cardBody.addEventListener("mouseenter", run);
cardBody.addEventListener("mouseleave", run);

function run(e) {
  console.log(e.type);
}
<div class="card-body">
  <hr>
  <h5 class="card-title" id="tasks-title">Todo's</h5>
  <div class="form-row">
    <div class="form-group col-md-6">
      <input class="form-control" type="text" name="filter" id="filter" placeholder="Search A Todo">
    </div>
  </div>
<div>


推荐阅读