【发布时间】:2017-11-30 19:51:41
【问题描述】:
我真的不知道为什么这不起作用。在我的 HTML 中,如果我将脚本放在 head 部分,我会在控制台中收到以下错误:
Uncaught TypeError: Cannot read property 'addEventListener' of null
如果我将脚本放在正文的底部,它就可以正常工作。
HTML:
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="script.js"> </script>
</head>
<body>
<ul>
<li><a href="#" data-img="img1" id="img1"> Shahin </a></li>
<li><a href="#" data-img="img2" id="img2"> Lina </a></li>
<li><a href="#" data-img="img3" id="img3"> Adrita </a></li>
</ul>
<img src="./img/1.jpg" class="hidden">
<img src="./img/2.png" class="hidden">
<img src="./img/3.jpg" class="hidden">
</body>
JavaScript:
var shahin = document.getElementById('img1');
var lina = document.getElementById('img2');
var adrita = document.getElementById("img3");
shahin.addEventListener('click',picShow);
lina.addEventListener('click',picShow);
adrita.addEventListener('click',picShow);
function picShow() {
console.log(this);
}
谁能告诉我我做错了什么以及放置脚本标签的正确位置在哪里?另外,我应该做些什么改变来从头部分运行我的脚本?我会很高兴你的回答。提前致谢
【问题讨论】:
-
必须加载 DOM 才能获取元素并附加侦听器。如果您的代码在头部,则在脚本运行之前 DOM 尚未加载。将您的代码包装在
onload或准备好的包装器中,或者将您的代码移动到 HTML 下 -
如果它在头部,你需要把它放在
$(document).ready()中,因为当你添加处理程序时你的身体还没有被渲染 -
@jdubjdub,只适用于 jQuery。
-
无论你想使用什么就绪状态的东西都可以 - 只是在 DOM 加载后运行的东西
标签: javascript html