JavaScript事件是浏览器在特定条件满足时发出的通知信号,本身不执行逻辑,需通过addEventListener绑定处理函数;事件对象含target、currentTarget等关键属性,需注意移动端和可访问性适配。
JavaScript 事件不是“某个函数”,也不是“一段代码”,而是浏览器在特定条件满足时自动发出的**通知信号**。比如用户按下鼠标左键、键盘按键、页面加载完成、网络请求返回,都会触发对应事件。它本身不执行任何逻辑,只是告诉 JS:“这事发生了”。真正干活的是你写的事件处理函数。
addEventListener 响应点击最稳妥直接写 onclick 属性(比如 )看似简单,但会覆盖已有监听器、难以移除、不利于模块化。现代标准做法是用 addEventListener:
const btn = document.getElementById('my-btn');
btn.addEventListener('click', function(event) {
console.log('被点了', event.target);
});
'click' 是事件类型,区分大小写,不能写成 'Click' 或 'CLICK'
this 指向变化)addEventListener('click', ...),所有回调都会执行btn.removeEventListener('click', handler),不能传匿名函数event 里藏着关键信息回调函数接收的 event 参数不是摆设。常见实用字段有:
event.target:真正被点击的 DOM 元素(可能是子元素,比如按钮里的图标)event.currentTarget:绑定监听器的那个元素(比如你绑在 上,它就是这个 )
-
event.preventDefault():阻止默认行为(如点击链接跳转、表单提交)
-
event.stopPropagation():阻止事件冒泡,避免父级监听器也被触发
误用 event.target 和 event.currentTarget 是新手高频坑——尤其在事件委托场景下,不加判断就直接操作 event.target,结果点到空白区域或文字就报错。
别忽略移动端和可访问性差异
只监听 click 在手机上可能响应迟钝(300ms 延迟),且对屏幕阅读器不友好。真实项目中要考虑:
- 用
'pointerdown' 替代 'click' 可获得更即时的触控反馈
- 确保可点击元素有
role="button" 和 tabindex="0",否则键盘用户按 Enter
或 Space 触发不了
- 同时监听
click 和 keydown(判断是否为 Enter/Space)才能兼顾鼠标和键盘用户
很多人写完 click 就以为完了,结果测试时发现盲人用户无法操作,或者 iOS Safari 点击无反应——问题往往出在没补全交互通道。