preventDefault、stopPropagation 、stopImmediatePropagation 区别

1. event.preventDefault()

作用:阻止浏览器默认行为****和事件传播无关!

常见默认行为:

  • a 标签跳转
  • form 表单提交
  • 鼠标右键弹出菜单
  • 输入框输入文字
  • 单选 / 复选框勾选

例子:

javascript 复制代码
document.querySelector('a').addEventListener('click', (e) => {
  e.preventDefault(); // 不跳转,但事件照样会冒泡!
});

2. event.stopPropagation()

**作用:阻止事件冒泡(也阻止捕获)**但:不影响当前元素自身绑定的多个事件

html 复制代码
<div id="parent">
  <div id="child">点击我</div>
</div>
javascript 复制代码
child.addEventListener('click', (e) => {
  e.stopPropagation(); // 事件不会传到 parent
});

// 给 child 再绑一个点击
child.addEventListener('click', () => {
  console.log('我依然会执行!'); // ✅ 会执行
});

特点:

  • 只拦向外冒泡
  • 不拦自己身上的其他同事件

3. event.stopImmediatePropagation()

作用:

  1. 阻止事件冒泡(和 stopPropagation 一样)
  2. 立刻停止当前元素后续绑定的同类型事件

还是上面的例子:

javascript 复制代码
child.addEventListener('click', (e) => {
  e.stopImmediatePropagation();
  console.log('第一个事件');
});

// 这个不会执行了!
child.addEventListener('click', () => {
  console.log('第二个事件'); // ❌ 不执行
});

这就是它和 stopPropagation 的唯一、最大区别

相关推荐
candyTong8 小时前
一觉醒来,大模型就帮我排查完页面性能问题
前端·javascript·架构
魔术师Grace8 小时前
我给 AI 做了场入职培训
前端·程序员
玩嵌入式的菜鸡9 小时前
网页访问单片机设备---基于mqtt
前端·javascript·css
前端一小卒9 小时前
我用 Claude Code 的 Superpowers 技能链写了个服务,部署前差点把服务器搞炸
前端·javascript·后端
滑雪的企鹅.10 小时前
HTML头部元信息避坑指南大纲
前端·html
一拳不是超人10 小时前
老婆天天吵吵要买塔罗牌,我直接用 AI 2 小时写了个在线塔罗牌
前端·ai编程
excel12 小时前
如何解决 Nuxt DevTools 中关于 unstorage 包的报错
前端
Rust研习社12 小时前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust
C澒12 小时前
AI 生码 - API2Code:接口智能匹配与 API 自动化生码全链路设计
前端·低代码·ai编程
浔川python社13 小时前
HTML头部元信息避坑指南技术文章大纲
前端·html