formmethod仅对type="submit"按钮生效,可临时覆盖单次提交的HTTP方法为get或post,必须配合formaction使用,不支持delete/put,且在enctype="multipart/form-data"时formmethod="get"会静默降级为post。

只能用 formmethod 临时改单个按钮的请求方式,或者直接改 <form> 的 method 属性——没有“运行时动态切换整个表单 method”的原生 HTML 方案。
formmethod 只对 type="submit" 按钮生效
你写了 formmethod="post" 却没反应?先看按钮是不是 type="submit"。如果是 type="button" 或 type="reset",浏览器压根不触发提交,formmethod 就是摆设。
- ✅ 正确写法:
<button type="submit" formmethod="post">删除</button>或<input type="submit" formmethod="post" value="保存"> - ❌ 错误写法:
<button type="button" formmethod="post">点我发 POST</button>—— 点了也不会发任何请求 - ⚠️ 注意:按钮必须在
<form>标签内,或通过form="form-id"显式绑定到某个表单
formmethod="get" 和 formmethod="post" 是唯二有效值
别写 formmethod="delete" 或 formmethod="PUT"。浏览器不认识,会静默降级为 GET(或回退到表单默认 method),后端收不到 DELETE 请求。
- 浏览器只识别小写或大写的
"get"和"post"字符串,其他一律忽略 - 想发 DELETE/PUT?必须用 JS 拦截 +
fetch(),不能依赖原生表单提交 -
formmethod只影响「这次点击」,不影响表单本身的method,也不影响回车提交、其他按钮、或form.submit()调用
formmethod 必须配合 formaction 才有意义
只改 formmethod 不改 formaction,等于换挡不换路——请求还是发到原 <form action> 地址。
立即学习“前端免费学习笔记(深入)”;
- 比如搜索页主表单
method="get",但「导出 Excel」按钮要走 POST 到/export,就得同时写:<button type="submit" formmethod="post" formaction="/export">导出</button> -
formaction优先级高于<form action>,每个按钮可独立指定目标地址 - 漏掉
name和value,后端就分不清哪个按钮被点了;例如:<button type="submit" name="cmd" value="export" formmethod="post" formaction="/export">导出</button>,后端才能收到cmd=export
enctype="multipart/form-data" 时 formmethod="get" 会失效
文件上传表单设了 enctype="multipart/form-data",再给按钮加 formmethod="get",浏览器会自动放弃 GET,回退到表单原始 method(通常是 POST),且不报错、不提示。
- 现象:Network 面板里看到仍是 POST 请求,不是你写的 GET
- 原因:GET 请求无法携带文件数据,这是 HTTP 协议限制,浏览器强制纠正
- 想用 GET 做轻量操作(如预览)?确保该按钮对应的是纯文本字段,且表单没设
enctype="multipart/form-data"
最容易被忽略的一点:IE 完全不支持 formmethod 和 formaction,连 IE11 都不行。如果项目还要兼容旧浏览器,就得用 JS 动态改 form.method 和 form.action,或者统一走 fetch——这时候 HTML 属性就只是 fallback 用了。



















