formmethod是html5属性,能覆盖的method,仅对type="submit"按钮生效,只支持get/post,点击时临时替换提交方法,不影响其他按钮或js提交。

formmethod 是什么,它真能覆盖 <form></form> 的 method 吗?
能,而且是标准行为。只要按钮有 formmethod 属性,它就会在点击时**完全覆盖**外层 <form></form> 的 method,哪怕表单本身设的是 GET,按钮也能单独发 POST 请求。
但注意:这个覆盖只对**该按钮触发的提交生效**,不影响其他按钮或 JS 调用 form.submit() 的行为。
-
formmethod只在<button type="submit"></button>或<input type="submit">上有效,<button type="button"></button>无视它 - 值只能是
get或post(大小写不敏感),其他如PUT、DELETE不被原生支持,浏览器会退化为GET - 如果按钮没写
formmethod,就继承<form></form>的method;如果表单也没设method,默认是GET
怎么让一个按钮用 POST,另一个用 GET,共用同一个表单?
直接给不同按钮加不同 formmethod 即可。常见于搜索框(GET)和“导出全部”(POST)共存的场景:
点击“搜索”会发 GET /api/data?q=xxx,点击“导出全部”则发 POST /api/data(带完整表单数据,包括 q 字段)。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 两个按钮共享同一套
name字段,但GET提交时参数拼在 URL,POST放在请求体里 - 如果“导出全部”不需要用户输入的
q,得用 JS 清空或改用独立表单,否则后端会收到冗余字段 -
formaction可以配合formmethod一起用,实现不同按钮跳不同 endpoint
formmethod 在 Safari 和旧版 Edge 中靠谱吗?
靠谱,但有边界。HTML5 标准定义了 formmethod,现代所有主流浏览器(Chrome、Firefox、Safari ≥ 6、Edge ≥ 12)都支持。
唯一要注意的是 IE —— 完全不支持 formmethod,所有按钮都会走 <form></form> 的 method。如果你还必须兼容 IE11,就得用 JS 拦截提交并手动发请求。
- Safari 对大小写不敏感,
FORMMETHOD="POST"和formmethod="post"都行 - 移动端 Safari 表现一致,无额外 bug
- 别依赖
formmethod="put"做 RESTful 操作——浏览器不会发 PUT 请求,实际仍是POST,后端需靠_method字段或 header 识别
为什么加了 formmethod 还是发了 GET?常见排查点
不是属性写错就是逻辑被绕过了。先看这几个硬性条件是否满足:
- 按钮必须是
type="submit",type="button"或没写type(默认submit)都可能被忽略 - 确保按钮在
<form></form>内部(或通过form="form-id"显式绑定),否则formmethod不生效 - 检查有没有 JS 绑定了
click或submit事件,并调用了event.preventDefault()—— 这会让原生表单提交逻辑失效,formmethod自然不触发 - 浏览器控制台 Network 面板里看请求方法,别只信 URL 看起来像 GET(比如 POST 成功后重定向到 GET 页面)
复杂点在于:它只作用于「原生表单提交流」,一旦引入框架(React/Vue 的受控组件)、或用 fetch 手动提交,formmethod 就彻底没意义了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










