javascript - 为什么有些变量没有定义?
问题描述
我对 javascript 提出这个问题感到很陌生,并且在这里完全被难住了。不知道为什么并试图弄清楚很多小时,但是如果,例如,我的脚本中有这一行:
var listen = document.getElementsByClassName('test_this')[0];
在我的本地机器上,当我在控制台中输入“listen”时,它会返回 undefined,但是如果我在控制台中手动输入它,那么它就可以工作。例如:
的HTML:
<p class='test_this'>hi</p>
JS:
var listen = document.getElementsByClassName('test_this')[0];
listen.addEventListener("click", function onclick(event) {
alert('hi');
});
function testZis() {
alert('test worked');
}
alert('saysHiAnyway');
Codepen 网址:https ://codepen.io/anon/pen/pqZNVR
如果我加载 codePen URL,我会收到正确的警报,但在我的浏览器中的本地计算机上,我只会收到此错误:Cannot read property 'addEventListener' of undefined
并且没有警报 - 大概是因为出于某种未知原因,var listen 声明行不起作用。
有人可以解释这里到底发生了什么吗?我会非常感激。我有一种感觉,它非常简单,但似乎很难识别。谢谢你的帮助。
解决方案
您有几个选项可以解决此问题:
将您的<script>
标签放在所有 HTML 代码的下方,即结束</body>
标签的正上方。
另一种方法是将所有代码包装在一个window.onload
事件处理程序中,如下所示:
window.onload = function() {
//All of your code goes here
}
推荐阅读
- python - 根据目标图像大小调整人脸特征大小
- c++ - 重载运算符 [ ] 时返回的堆栈内存地址
- javascript - 使用静态抓取服务
- c++ - 令牌识别错误:ANTLR4.8 C++ 目标中度数符号的“°”
- python - 在树莓派上启动期间找不到 Bash 别名
- android - 获取 ConstraintLayout 的高度和宽度
- r - R泊松适合ggplot2
- typescript - 为什么 getter/setter 在 vue typescript 类组件中无法正常工作
- c - printf 下的分段错误(核心转储)
- javascript - 电子表格中的数据未填充到电子邮件正文中