event.preventdefault()用于阻止浏览器默认行为,如链接跳转、表单提交刷新、空格键滚动页面;必须在事件处理函数同步执行时调用,且仅适用于有默认行为的事件。

在 JavaScript 中,event.preventDefault() 用于阻止浏览器对某些事件的默认行为,比如点击链接时跳转、提交表单时刷新页面、按空格键时页面滚动等。关键是要在事件处理函数中正确调用它,并确保事件对象被传入。
什么时候必须用 preventDefault
不是所有事件都有默认行为,只有像 click(链接)、submit(表单)、keydown(空格/回车)这类有明确浏览器默认动作的事件才需要。比如:
- 点击
<a href="xxx"></a>默认跳转 —— 阻止后可改用 AJAX 加载内容 - 表单
<form></form>提交默认刷新页面 —— 阻止后可做前端校验 + 异步提交 -
keydown按下空格键默认触发页面向下滚动 —— 阻止后可自定义滚动逻辑
常见写法:绑定事件时传入 event 参数
确保事件回调函数接收事件对象(通常叫 event 或 e),然后第一行就调用 preventDefault():
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
// 链接不跳转,只控制台输出
document.querySelector('a').addEventListener('click', function(event) {
event.preventDefault();
console.log('链接被拦截');
});
// 表单不提交,改用 fetch 发送数据
document.querySelector('form').addEventListener('submit', function(event) {
event.preventDefault();
const data = new FormData(this);
fetch('/api/login', { method: 'POST', body: data });
});
注意:不能在异步操作后再调用
preventDefault() 必须在事件处理函数同步执行阶段调用,不能放在 setTimeout、fetch.then 或其他异步回调里,否则无效:
- ✅ 正确:
event.preventDefault()写在函数开头 - ❌ 错误:
setTimeout(() => event.preventDefault(), 0)—— 此时默认行为早已发生
替代方案:return false(仅限 jQuery 或内联 handler)
原生 DOM 事件中,return false 并不会阻止默认行为,它只是退出函数;只有在 jQuery 的事件处理中,return false 才等价于 preventDefault() + stopPropagation()。内联 HTML 事件(如 onclick="return false")中它才有效,但不推荐这种写法。
所以,坚持用 event.preventDefault() 最清晰、最可靠。










