javascript - 如何解决 TypeError: document.querySelector(...) is null?
问题描述
我正在尝试使用 document.querySelector() 来定位图像,但它给了我一个错误说 TypeError: document.querySelector(...) is null
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Step 1</title>
<style>
#image1{
}
</style>
<script>
document.querySelector('#image1').addEventListener("click",myFunction);
// addEventListener(event, function, useCapture)
function myFunction(){
alert("alert on click");
}
</script>
</head>
<body>
<img src="images/image1.jpg" id="image1" />
</body>
</html>
解决方案
DOMContentLoaded 事件在初始 HTML 文档完全加载和解析后触发,无需等待样式表、图像和子框架完成加载。一个非常不同的事件加载应该只用于检测一个完全加载的页面。在 DOMContentLoaded 更合适的地方使用 load 是一个非常常见的错误,所以要小心。
在 DOM 准备好之前,您的脚本正在运行。您必须使用以下代码包装您的代码DOMContentLoaded
:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Step 1</title>
<style>
#image1{
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function(event) {
document.querySelector('#image1').addEventListener("click",myFunction);
// addEventListener(event, function, useCapture)
function myFunction(){
alert("alert on click");
}
});
</script>
</head>
<body>
<img src="images/image1.jpg" id="image1" />
</body>
</html>
推荐阅读
- r - 在 ShinyServer 上将 `shiny` 的默认加载更改为特定的 `.libPaths()`
- javascript - 我无法比较 Javascript 中的两个数组项
- excel - 如何从 Excel 中的单元格中删除某些文本?
- eclipse - 我所有的 Eclipse 文件都显示为 .DATAWAIT
- c# - 我应该处置不属于自己的实例吗?
- winforms - WInform DataGridView 到 Datetimepicker C#
- android - 如何在 Firebase 中显示示例(3 和 7)之间的类别?
- postgresql - 当数据库位于同一 postgres 服务器中时,如何查询两个 postgres 数据库(使用单个查询)?
- angularjs - 使用 ngModel 将 AngularJS 指令升级为 Angular 组件
- spring-webflux - 如何使用 Spring Webflux 创建列表流?