为防止button在表单内回车触发提交,应显式写type="button";因未声明type时button默认为submit,按enter会触发表单提交,而type="button"无默认行为,彻底隔离enter影响。

button没写type时回车就提交,怎么防
直接写 type="button"。这是唯一可靠、不依赖 JS、从源头切断问题的做法。
为什么type="button"能防住回车提交
浏览器规范规定:<button></button> 在 <form></form> 内部且未声明 type 时,默认就是 type="submit"。按 Enter 键会触发表单提交,不是“意外”,而是标准行为。
-
type="submit":自动收集同级<form></form>中所有带name的控件,发起提交(即使action为空也会刷新页面) -
type="button":无任何默认行为,只响应click,完全不进入表单生命周期 - 写成
type="button"后,event.preventDefault()就没必要加了——它本来就不提交,没东西可防
容易被忽略的坑
看似简单,但翻车点很隐蔽:
-
type=button(不带引号)在部分旧浏览器或严格解析器下可能失效,必须写全type="button" - 第三方组件或 SSR 模板如果没兜底
type,生成的按钮仍会缺省,得在模板层或组件封装层强制设默认值 - React/Vue 中用
@click或onClick绑定,不代表能绕过原生submit行为——JS 执行前,页面可能已经跳转或刷新 - 非法
type值(如type="primary"、type="")在<form></form>内会被降级为submit,比不写还危险
要不要监听keydown拦截Enter
没必要,除非你无法控制按钮 HTML(比如嵌入式 SDK、遗留系统)。type="button" 已彻底隔离 Enter 键影响;而靠 onkeydown="if(event.key==='Enter') event.preventDefault()" 或 jQuery 的 $(form).on('keydown', ...) 属于兜底补救,增加维护成本,且容易漏掉 textarea 或其他输入场景。
真正要小心的是:当按钮既要校验又要提交时,别误用 type="button" 导致 submit 逻辑消失——这时该用 type="submit" + JS 校验 + 条件性 event.preventDefault()。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











