type="reset"仅重置表单至初始值,不阻止提交;真正阻止提交需用type="button"并配合js手动重置,且需注意框架状态同步、事件触发及兼容性问题。

type="reset" 会清空整个表单,但不会阻止默认提交行为
很多人以为 type="reset" 是用来“取消提交”的,其实它和提交完全无关——它只负责把所有 <input>、<textarea></textarea>、<select></select> 恢复到页面加载时的初始值。如果你点了它却触发了表单提交,那说明你误用了 type="submit" 或没写 type(浏览器默认当 submit)。
按钮不提交的关键:明确设置 type="button"
真正能“阻止默认提交行为”的,是把按钮类型设为 type="button"。它既不会提交,也不会重置,就是一个纯触发 JS 的载体。
- 不写
type属性 → 浏览器按规范视为type="submit" -
type="reset"→ 重置表单,但不提交;若同时有其他 submit 按钮被自动触发(比如回车),它拦不住 -
type="button"→ 完全无默认行为,必须靠onclick或事件监听器驱动逻辑
示例:
<button type="button" onclick="resetForm()">取消并清空</button>
想点击就清空又不提交?用 type="button" + JS 手动重置
直接用 type="reset" 看似省事,但它依赖表单初始值(比如 value="abc" 加载后被用户改过,点 reset 就回退到 abc),而很多场景需要更可控的清空逻辑(例如清空后还跳转、或保留某些字段)。
-
document.getElementById('myForm').reset()效果等同于type="reset"按钮,但可放在type="button"里调用 - 如果表单用了 React/Vue 等框架,DOM 重置可能不生效(状态没同步),此时必须手动清空 state 或 ref
- 注意:
reset()不会触发input或change事件,依赖这些事件做校验的逻辑要额外补
容易忽略的兼容性细节
type="reset" 和 type="button" 在所有现代浏览器中行为一致,但老版本 IE 对 <button></button> 的 type 解析偶尔有偏差——稳妥做法是:只要不希望提交,就显式写 type="button",别依赖默认值。
另外,移动端软键盘回车键默认触发表单内第一个 type="submit" 按钮,哪怕它视觉上藏在后面。所以表单里如果有多个按钮,务必检查顺序和 type 值,否则用户敲回车可能意外提交。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











