标准答案

  1. button 在 form 里的默认 type 是 submit。
  2. 所以即使按钮文案是“取消”“清空”“发送验证码”,只要没写 type,点击它也可能触发表单提交。
  3. 表单里的按钮要按意图显式声明:提交按钮写 type="submit",普通操作按钮写 type="button",重置按钮才写 type="reset"。
  4. 这样可以避免误提交、页面刷新、接口误发、校验被触发或者状态被清空。
  5. 组件库按钮、弹窗按钮、上传按钮只要可能出现在 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",导致用户已输入内容被意外清空。

作者信息