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 的唯一、最大区别

相关推荐
一点一木36 分钟前
深度体验TRAE SOLO移动端7天:作为独立开发者,我把工作流揣进了兜里
前端·人工智能·trae
天外飞雨道沧桑1 小时前
TypeScript 中 omit 和 record 用法
前端·javascript·typescript
Lee川2 小时前
mini-cursor 揭秘:从 Tool 定义到 Agent 循环的完整实现
前端·人工智能·后端
canonical_entropy2 小时前
从 Spec-Driven Development 到 Attractor-Guided Engineering
前端·aigc·ai编程
研☆香2 小时前
聊聊前端页面的三种长度单位
前端
给钱,谢谢!3 小时前
React + PixiJS 实现果园成长页:从状态机到浇水动画
前端·react.js·前端框架
暗冰ཏོ4 小时前
VUE面试题大全
前端·javascript·vue.js·面试
次元工程师!4 小时前
LangFlow开发(三)—Bundles组件架构设计(3W+字详细讲解)
java·前端·python·低代码·langflow
Bug-制造者5 小时前
现代Web应用全栈开发:从架构设计到部署落地实战
前端
青春喂了后端5 小时前
IntelliGit 前端状态层重构:把一个全局 Store 拆成清晰的状态边界
前端·重构·状态模式