formaction 属性允许为表单内不同提交按钮指定独立提交地址,优先级高于表单 action,仅作用于 type="submit" 的 button 或 input 元素,配合 formmethod 和 formenctype 可进一步控制请求方式与编码类型。

HTML5 的 formaction 属性允许你为同一个表单内的不同提交按钮指定**独立的提交地址**,从而在不写 JavaScript 的前提下,实现“保存草稿”和“正式发布”两种行为的分离。
formaction 的基本用法
它只作用于 <button type="submit"></button> 或 <input type="submit"> 元素,优先级高于表单本身的 action 属性。浏览器点击哪个按钮,就按其 formaction 值发送请求(若未设置,则回退到表单的 action)。
示例:
后端需配合处理不同路径
两个 formaction 指向不同 URL,意味着后端要提供两个独立接口,分别处理逻辑差异:
-
/api/save-draft:只校验基础字段(如标题非空),存入数据库并标记
status = 'draft',返回成功即可 -
/api/publish:做更严格校验(如内容长度、敏感词、封面图必填等),存入同时设
status = 'published',可能触发通知或索引更新
注意事项与常见问题
使用时需注意以下几点,避免意外行为:
- 按钮必须在
<form></form>内部,且type="submit",否则formaction不生效 - 若按钮有
form属性(指向页面中另一个表单 ID),则以该表单为准,formaction仍有效,但提交的是目标表单的数据 - 不支持 GET 请求的语义化区分(比如用 query 参数),因为
formaction是完整 URL,建议统一用 POST + 路由区分 - 无法阻止默认提交,如需前置验证(例如确认发布),仍需搭配
onclick="return confirm(...)"或监听submit事件
进阶:配合 formmethod 和 formenctype
可进一步控制每个按钮的请求方式与编码类型:
例如上传图片时,发布按钮可单独启用文件编码,而保存草稿保持默认编码,避免无谓开销。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











