是,formaction属性会完全忽略的action,直接以按钮自身的formaction值为准发起提交;仅对type="submit"的button或input有效,且优先级最高。

formaction 属性直接覆盖 form 的 action
只要按钮带有 formaction,点击它时就会忽略 <form></form> 标签上写的 action,改用按钮自己的地址发请求。这是原生 HTML5 就支持的特性,不需要 JS 干预。
常见错误是把 formaction 写成 action(漏了 form- 前缀),或者误以为它只对 <input type="submit"> 有效——其实 <button type="submit"></button> 同样支持。
<button type="submit" formaction="/api/save">保存</button><input type="submit" formaction="/api/publish" value="发布">- 多个按钮可共存,各自独立指定后端路径
注意 method 和 enctype 的继承与覆盖关系
formaction 只改地址,不改请求方法或编码类型。默认沿用 <form></form> 上的 method(通常是 GET 或 POST)和 enctype(如 multipart/form-data)。如果某个按钮需要不同行为,必须显式加 formmethod 或 formenctype。
比如上传文件的按钮要发 POST,但表单默认是 GET,就得这样写:
<button type="submit" formaction="/upload" formmethod="post" formenctype="multipart/form-data">上传附件</button>
否则会因 method 不匹配被后端拒绝,或文件字段为空。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
兼容性没问题,但别和 JS submit() 混用
所有现代浏览器(Chrome/Firefox/Safari/Edge)都支持 formaction,IE10+ 也支持。真正容易出问题的是在按钮上同时绑了 onclick 并调用 form.submit() —— 这会绕过 formaction,强行走表单默认地址。
- 想用原生多地址提交,就别给 submit 按钮写
onclick - 如果必须用 JS 控制(比如校验后再提交),那就别依赖
formaction,改用fetch或动态改form.action -
formaction不触发form.onsubmit事件里的逻辑,这点常被忽略
服务器端要能区分不同入口路径
后端收到请求时,只看 URL 路径,不会知道是哪个按钮触发的。所以 /api/save 和 /api/publish 必须对应不同的路由处理函数,不能靠同一个接口再根据按钮名分支判断。
顺带一提:按钮的 name 和 value 仍会作为表单数据发送,可用于辅助识别意图,但不应作为主路由依据。
最易被忽略的一点:如果多个按钮指向同一路径但不同 method(比如一个 formmethod="get",一个 formmethod="post"),后端必须同时支持这两种方法,否则 405 Method Not Allowed 就来了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










