标准答案
- button 在 form 里的默认 type 是 submit。
- 所以即使按钮文案是“取消”“清空”“发送验证码”,只要没写 type,点击它也可能触发表单提交。
- 表单里的按钮要按意图显式声明:提交按钮写 type="submit",普通操作按钮写 type="button",重置按钮才写 type="reset"。
- 这样可以避免误提交、页面刷新、接口误发、校验被触发或者状态被清空。
- 组件库按钮、弹窗按钮、上传按钮只要可能出现在 form 里,都要确认最终渲染出来的 button type 是正确的。
题目解析
- submit:提交所属表单,会触发表单校验和 submit 事件。
- button:普通按钮,不触发表单提交,适合打开弹窗、发送验证码、清空局部状态等操作。
- reset:重置表单字段到初始值,业务里要谨慎使用。
这个问题很常见,因为按钮通常先作为 UI 元素被写出来,后面才被放进 form。默认 submit 会把普通点击变成表单提交。
如果项目里有 Button 组件,组件默认 type 最好是 button,再让提交场景显式传 submit。这样能降低误提交风险。
代码示例
表单内部的非提交按钮必须写 type="button"。
HTML
<form>
<label for="phone">手机号</label>
<input id="phone" name="phone" type="tel" required>
<button type="button">发送验证码</button>
<button type="submit">提交</button>
</form>常见误区
- 认为 button 默认就是普通按钮。它在 form 中默认是 submit。
- 取消按钮、验证码按钮不写 type,导致点击时触发表单提交。
- 滥用 type="reset",导致用户已输入内容被意外清空。