javascript - addEventListener - 事件与函数摄入
问题描述
有点难以理解为什么以及何时应该将事件/函数作为事件侦听器应该寻找的第二个参数。例如:
document.addEventListener('submit', e => {
}
对比
document.addEventListener('submit', function whateverName() {
}
解决方案
我创建了这个示例来尝试帮助演示这些差异。这主要取决于您如何访问this
元素。使用箭头函数,您必须提供 ,event
以便您可以使用 访问元素e.target
。使用标准函数时,您不需要事件,而是可以依赖this
引用绑定到EventListener
.
该示例打印true
元素是否匹配。使用箭头函数,您会注意到结果是false
因为this
在上下文中不存在。标准函数将返回true
,因为this
它确实存在于上下文中。
箭头功能完全相同。我只是展示这一点e
并(e)
代表同样的事情。查看箭头函数的文档以获取更多信息。
document.getElementById("btn0").addEventListener('click', e => {
console.log(e.target==this);
});
document.getElementById("btn1").addEventListener('click', (e) => {
console.log(e.target==this);
});
document.getElementById("btn2").addEventListener('click', function() {
// event is not passed
console.log(this==this);
});
document.getElementById("btn3").addEventListener('click', function(e) {
console.log(e.target==this);
});
<button id="btn0" type="button">Arrow Function 1</button>
<button id="btn1" type="button">Arrow Function 2</button>
<button id="btn2" type="button">Function 1</button>
<button id="btn3" type="button">Function 2</button>
推荐阅读
- vuetify.js - Vuetify - v-simple-checkbox 防止 v-data-table row.click 事件
- node.js - 我已经使用加密模块加密了 node.js 中的数据,如何使用 crypto-js 在 react.js 中解密
- wordpress - ERR_EMPTY_RESPONSE 网站未使用 WP Bakery Page builder 和 Donare Store Theme 进行更新
- github - VS-Code 到 GitHub-Codespace // 代理问题
- postgresql - LSN 外部表示
- google-cloud-platform - 我找不到从 Google Cloud Platform 下载的 VM 登录凭据
- android - Android开机动画修改
- javascript - 将 React 应用程序部署到 Apache 服务器后,Route Param 无法与 React 一起使用
- c# - 比较名字和姓氏 (C#)
- html - Logo Html 不动