如何修复:“TypeError:无法读取 null 的属性‘addEventListener’”…?//
2019-07-24
79696
我正在通过视频教程学习 html/css/js。我正在学习如何编写 js 代码,但我无法帮助解决问题。我希望你们能给我解决方案。问题是关于 add.EventListener 的。当我在 chrome 中运行代码时,控制台中显示:“app.js:11 Uncaught TypeError: 无法读取 null 的属性‘addEventListener’”我希望在您的帮助下解决这个问题。谢谢!
const computerScore = 0;
const userScore_span = document.getElementById("user-score");
const computerScore_span = document.getElementById("computer-score");
const scoreBoard_div = document.querySelector(".score-board");
const result_div = document.querySelector(".result");
const p_div = document.getElementById("p");
const r_div = document.getElementById("r");
const s_div = document.getElementById("s");
p_div.addEventListener('click', function(){
console.log("hey you clicked p")
})
这是 javescript 代码 - 下面是 html 代码,用于查看任何错误...
<html>
<head>
<meta charset="utf-8">
<title>Rock Paper Sicssors Game</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="app.js" charset="utf-8"></script>
</head>
<body>
<header>
<h1>Rock Paper Sicssors</h1>
</header>
<div class="score-board">
<div id="user-label" class="badge">user</div>
<div id="computer-label" class="badge">comp</div>
<span id="user-score">0</span>:<span id="computer-score">0</span>
</div>
<div class="result">
<p>Paper covers rock. You win!</p>
</div>
<div class="choices">
<div class="choice" id="p">
<img src="game.image/paper-img.jpg" alt="image" height="42" width="42">
</div>
</div>
<div class="choices">
<div class="choice" id="r">
<img src="game.image/rock-img.jpg" alt="image" height="42" width="42">
</div>
</div>
<div class="choices">
<div class="choice" id="s">
<img src="game.image/siccsors-img.jpg" alt="image" height="42" width="42">
</div>
</div>
<p1 id="action-message">Make your move.</p1>
</body>
</html>
3个回答
发生这种情况的原因是,您将包含 JavaScript 的文件包含在 html 文件的
<head>
部分中。
<script type="text/javascript" src="app.js" charset="utf-8"></script>
这意味着浏览器将尝试执行此语句
const p_div = document.getElementById("p");
但会失败,因为相关元素稍后在
<body>
部分中定义。
尝试将
<script>
部分移动到
<body>
的末尾。
obscure
2019-07-24
浏览器处理页面的方式如下:
- 下载所有 HTML
- 浏览头部并下载 app.js
- 执行 app.js
- 从 html 构建 dom
我建议将脚本标记
<script type="text/javascript" src="app.js" charset="utf-8"></script>
移至正文底部。然后,浏览器将在执行脚本之前确保所有 dom 都存在。
或者,您可以在脚本中执行以下操作:
function init() {
// your code
}
在正文中执行以下操作:
<body onload='init()'>
它将等到正文加载完毕后再执行代码。
Dr_Derp
2019-07-24
发生这种情况的原因是您在
<head>
标记中链接了脚本,并且在 DOM 加载时首先加载脚本,然后在主体之后加载 html 内容。脚本不知道您的 id 为“p”的元素。您必须将脚本放在
body
标记之前以关闭它,如下所示:
<body>
...
<script src="app.js"></script>
</body>
Christian Carrillo
2019-07-24