在 javascript 中,阻止事件默认行为需调用事件对象的 preventdefault() 方法,适用于 click、submit 等可取消事件,须在事件触发后、默认行为执行前同步调用,且不阻止冒泡。

在 JavaScript 中,阻止事件的默认行为主要通过调用事件对象的 preventDefault() 方法实现。
什么时候需要阻止默认行为
浏览器对某些事件有内置的默认操作,比如点击链接会跳转页面、提交表单会刷新页面、按空格键时页面滚动等。当你要用 JavaScript 自定义这些行为(如用 AJAX 提交表单、用 JS 控制滚动、拦截链接跳转做路由切换),就需要阻止默认行为,否则两者会同时发生,导致异常或重复操作。
基本写法:在事件处理函数中调用 preventDefault()
必须在事件触发后、默认行为执行前调用该方法。常见写法如下:
- 使用传统事件监听:element.addEventListener('click', function(e) { e.preventDefault(); });
- 使用箭头函数(注意 this 绑定问题,但 preventDefault() 不依赖 this):element.addEventListener('submit', (e) => e.preventDefault());
- 在内联事件中(不推荐,仅作理解):点击
注意 preventDefault() 的适用范围和限制
它只对**可取消的事件**生效(可通过 e.cancelable 判断)。例如:
- ✅ 支持:click、submit、keydown、contextmenu、touchstart 等
- ❌ 不支持:load、error、scroll(原生 scroll 事件不可取消)
- 调用后不会阻止事件冒泡,如需同时阻止冒泡,要额外调用 e.stopPropagation()
常见误用场景与建议
容易出错的地方包括:
- 忘记传入事件参数(function() { e.preventDefault(); } 中 e 未定义 → 报错)
- 在异步回调中调用(如 setTimeout 里调用 preventDefault)→ 失效,因为默认行为早已发生
- 对非可取消事件强行调用 → 无效果,控制台可能报 warning(取决于浏览器)
- 在表单 submit 事件中,应优先阻止默认行为,再执行验证或发送请求,避免页面刷新打断逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











