formmethod仅对type="submit"的button或input元素临时覆盖提交方式,值只能是小写的get或post,必须配合formaction使用,js提交时完全失效。

formmethod 只能临时覆盖单个按钮的提交方式,不是改表单、也不是改全局行为,它只在点击那个按钮时起效。
formmethod 必须配合 type="submit" 才生效
浏览器只认 button 或 input 元素上带 type="submit"(或 type="image")时的 formmethod。其他情况一律忽略:
-
<button type="button" formmethod="post">点不动</button>—— 完全没用,不触发提交 -
<button formmethod="get">缺 type</button>—— 浏览器当没看见 -
<form formmethod="post"></form>——formmethod不是<form></form>的属性,语法错误
值只能是 get 或 post,大小写必须小写
formmethod 的合法值只有 "get" 和 "post",且建议全小写:
-
formmethod="GET"在部分旧浏览器(如 Safari 5.1)会降级为表单默认 method -
formmethod="put"或formmethod="delete"被所有主流浏览器静默忽略,最终走<form method></form>的值(通常是get) - 想发 PUT/DELETE?必须用
fetch()拦截并手动发请求,formmethod帮不上忙
不配 formaction 就等于白设
formmethod 只改方法,不改地址。如果只写 formmethod="get" 却没写 formaction,请求仍发往 <form action></form>,后端可能收到意料外的数据:
-
<form action="/save" method="post"><button type="submit" formmethod="get">预览</button></form>→ 实际发 GET /save,不是你想要的预览接口 - 正确做法:
<button type="submit" formmethod="get" formaction="/preview">预览</button> -
formaction=""(空字符串)会被忽略,不是“当前页”,而是回退到<form action></form>
JS 提交时 formmethod 完全失效
一旦你用 JavaScript 调用 form.submit() 或 event.preventDefault() + fetch(),formmethod 就彻底没用了:
- 它只参与原生表单提交流程,跟 JS 无关
- 用
button.click()触发提交?可以,前提是按钮是type="submit"且在有效form内(或带正确form="id") - 检查是否生效,别信 HTML 写法,直接看 Chrome DevTools 的 Network 标签页里 Request Method 字段
最容易被忽略的是:你以为点了按钮就走了新方法,但没确认 formaction 是否同步改了,也没去 Network 里看真实发出的请求方法——很多问题其实卡在这一步。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











