javascript - 如果将 addEventListener 放在 head 部分而不是 body 中,则 addEventListener 不起作用

标签 javascript html

我真的不知道为什么这不起作用。在我的 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);
}

谁能告诉我我做错了什么以及放置脚本标签的正确位置在哪里?另外,我应该做些什么改变才能从 head 部分运行我的脚本?我会很高兴你的回答。提前致谢

最佳答案

您的脚本在正文 HTML 的其余部分之前加载和执行,因此 document.getElementById 自然会返回 null。

您应该在 document.ready 事件发生时或之后运行事件监听器订阅代码。

将您发布的代码包装到一个 JS 函数中,然后将该函数设置为要在 document.ready 上执行的回调:

document.addEventListener('load', initFn);

关于javascript - 如果将 addEventListener 放在 head 部分而不是 body 中,则 addEventListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581540/

相关文章:

javascript - 修改对象的键而不创建新对象

javascript - 如何使用 d3.js 在 X 轴上添加间隔?

javascript - 如何使用jquery扩展对象

html - 列表项的高度

Javascript 形式 NAN 错误

html - 定义列表与缺失定义的对齐

javascript - 如何在 sencha touch 中使用 Ext.ux.touchcalendar 中的 css 更改特定单元格颜色

javascript - 使用 JavaScript 获取 CSS 属性的值

html - 居中文字和图片

html - 表格单元格两种颜色背景对 Angular 线