🎯 搞懂 Event:是什么、有什么用、用在哪、解决什么问题

0 阅读2分钟

搞懂 Event:是什么、有什么用、用在哪、解决什么问题

.event(事件对象)是 JS 事件驱动模型的核心产物:当用户在网页上做任何动作(点击、输入、按键等)时,浏览器会自动生成一个包含该动作所有细节的对象,这个对象就是 event(我们通常简写为 e)。

Event 有什么用?解决了什么问题?

如果没有 event,你根本不知道用户具体做了什么和实现不了你想要的特定功能

  • 不知道他点了页面上的哪个元素
  • 不知道他按了键盘的 “回车” 还是 “ESC”
  • 不知道他鼠标在图片的哪个位置
  • 不知道他在输入框里写了什么
  • 你点链接,它非要跳转走

通过 e.xxx 属性,你能精准读取所有细节:

属性解决的问题
e.target你到底点了 / 操作了谁?
e.key你按了键盘的哪个键?
e.offsetX/Y你鼠标在元素的哪个位置?
e.target.value你在输入框里写了什么?

通过 e.xxx() 方法,你能强行修改浏览器的默认行为:

方法解决的问题
e.preventDefault()阻止浏览器默认行为(如表单刷新、链接跳转)
e.stopPropagation()阻止事件冒泡(如只关弹窗,不触发背景)

具体请查看MDN - Event文档

Event 使用在什么场景?

动态列表 / 事件委托

问题:列表里的元素是动态添加的,每次添加都重新绑事件太麻烦。

用 Event 解决:给父元素绑事件,用 e.target 判断真正点击的是谁。

// 只给 ul 绑一次事件,动态添加的 li 也能响应
ul.addEventListener('click', function(e) {
  if (e.target.classList.contains('delBtn')) {
    e.target.parentElement.remove(); // 删除对应的 li
  }
});

表单验证

问题:用户输入不对时,不能让表单提交刷新页面。

用 Event 解决:用 e.preventDefault() 阻止默认提交。

form.addEventListener('submit', function(e) {
  if (!email.includes('@')) {
    e.preventDefault(); // 阻止刷新
    alert('邮箱格式不对!');
  }
});

回车提交 / ESC 关闭

问题:不知道用户按了哪个键,无法实现快捷操作。

用 Event 解决:用 e.key 判断按键。

input.addEventListener('keydown', function(e) {
  if (e.key === 'Enter') submit(); // 回车提交
  if (e.key === 'Escape') closeModal(); // ESC 关闭弹窗
});

弹窗关闭(阻止冒泡)

问题:点击弹窗里的关闭按钮,会连弹窗背景一起触发,导致弹窗关了又开。

用 Event 解决:用 e.stopPropagation() 阻止事件传到父元素。

closeBtn.addEventListener('click', function(e) {
  e.stopPropagation(); // 不让事件传到背景
  modal.style.display = 'none';
});

鼠标跟随 / 画图

问题:不知道鼠标在元素的哪个位置,无法实现交互效果。

用 Event 解决:用 e.offsetX/Y 获取坐标。

canvas.addEventListener('mousemove', function(e) {
  console.log('鼠标在画布内的坐标:', e.offsetX, e.offsetY);
  // 这里可以写画图逻辑
});