formaction 属性允许为 submit 类型的 button 或 input 指定独立提交 URL,覆盖表单 action,实现“保存草稿”和“正式发布”等多目标提交;仅适用于 type="submit" 或 type="image" 元素,method 由表单统一指定。

HTML5 的 formaction 属性允许你为表单内的不同提交按钮指定独立的提交地址,无需 JavaScript 就能实现在同一表单中区分“保存草稿”和“正式发布”两种行为。
理解 formaction 的作用位置
该属性只能用在 <button type="submit"></button> 或 <input type="submit"> 元素上,它会覆盖表单整体的 action 属性,仅影响当前按钮的提交目标。
注意:表单本身的 method(如 POST)仍生效;若需不同请求方法(如 PUT/PATCH),需后端配合或改用 JavaScript。
基础 HTML 结构示例
以下是一个典型博客编辑表单:
立即学习“前端免费学习笔记(深入)”;
后端需配合的关键点
两个提交地址应由后端分别处理:
-
/api/drafts/save:接收数据后存入草稿表(如
drafts),返回成功状态,不改变文章发布状态 -
/api/posts/publish:验证内容完整性(如标题、正文非空),将数据写入正式文章表(如
posts),并可同时清除对应草稿
两者共用同一套字段名(如 content、title),避免重复定义表单控件。
增强体验的小技巧
提升用户感知与容错性:
- 给按钮添加
name和value,便于后端识别操作意图(例如name="action" value="save") - 禁用按钮防止重复点击:
<button ... onclick="this.disabled=true"></button> - 搭配
formenctype(如multipart/form-data)支持附件上传场景 - 若需草稿自动保存,仍需 JS 配合定时提交到草稿接口,
formaction本身不提供自动触发能力
不复杂但容易忽略。



















