javascript - 类型错误:无法读取属性 '#' 未定义的
问题描述
有两个<input type="text">
表单元素和一个button
我试图将事件处理程序附加到 via .forEach()
。在尝试访问每个元素时,会引发以下错误:
Uncaught TypeError: Cannot read property '#<HTMLInputElement>' of undefined
但是,如果我将事件处理程序单独硬编码到这些元素中的每一个,则不会引发主题错误。这是怎么回事?
JS
失败
const login_container = document.querySelector(".login_form_container");
const username_field = document.getElementById("id_login_username");
const password_field = document.getElementById("id_login_password");
const post_login = document.getElementById("post_login");
login_container.addEventListener("mouseout", function(event) {
this.classList.add("shift");
})
[post_login, username_field, password_field].forEach((widget) => {
widget.addEventListener("mouseover", function(event) {
login_container.classList.remove("shift");
})
})
通行证
post_login.addEventListener("mouseover", function(event) {
login_container.classList.remove("shift");
})
username_field.addEventListener("mouseover", function(event) {
login_container.classList.remove("shift");
})
password_field.addEventListener("mouseover", function(event) {
login_container.classList.remove("shift");
})
HTML
<div class="login_form_container shift slide">
<form class="login_form">
{% for field in login_form %}
{{ field }}
{% endfor %}
<button id="post_login" class="login_button" type="button">Access</button>
</form>
</div>
解决方案
JSFiddle显示一个警告,解释正在发生的事情。
调用后没有任何分号.addEventListener
,这意味着 JavaScript 解析器将数组字面量解释为addEventListener
.
并且由于post_login
不是undefined
(返回值)的有效索引,它会抛出一个TypeError
.
login_container.addEventListener(...)[post_login, ...].forEach(...)
您可以通过在每次调用后简单地添加分号来修复它。
推荐阅读
- c# - 为什么我更改的字符串没有出现在使用选项卡式表单 xamarin 的其他页面上
- c++ - 随机分配新分配的内存 (C/C++)
- rest - http 客户端无法使用 jearsey multipart 作为参数调用服务
- python - 尝试使用 AzureAD 登录从 python 连接到雪花时出错
- java - 在属性 Spring Boot/MongoDB 存储库中获取具有不同数据类型的条目
- python-3.x - Python Streamhandler 也记录到 Ubuntu Syslog - 为什么?
- android - 在发布 apk(Flutter) 中面临图像选择器的问题
- javascript - 在nodejs中使用gridfs将本地文件上传到mongodb
- sql - T-SQL :: 在将 1 更改为 0.5 时将数据类型 varchar 转换为数字时出错
- python - 以良好的分辨率将 JPG 图像添加到 Matplotlib 绘图