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

相关推荐
万少4 小时前
用腻了 WorkBuddy 的默认界面?这个开源小工具给它换上了毛玻璃
前端·javascript·后端
海上彼尚8 小时前
Nodejs也能写Agent - 16.LangGraph篇 - 条件分支与循环
前端·后端·langchain·node.js
To_OC8 小时前
从 “卡死半天” 到 “打字机效果”:大模型流式输出前端实现全记录
前端·javascript·llm
SoaringHeart9 小时前
Flutter最佳实践:键盘辅助视图输入框天添加图片附件
前端·flutter
kyriewen9 小时前
我看完这篇安全论文——AI推荐的npm包,92%是编出来的
前端·javascript·ai编程
小心我捶你啊11 小时前
数据采集和Web解锁不是一回事,从用途到规则区分
前端·爬虫·网络协议
hunterandroid11 小时前
[鸿蒙从零到一] ArkUI 基础组件实战:Text、Image、Button 与 TextInput
前端
fsssb11 小时前
Chromium 源码学习笔记(五):一次点击,在进入 JS 之前先经历了什么?
前端
hunterandroid11 小时前
WorkManager 可靠性实战:唯一任务、重试与幂等设计
android·前端