formmethod仅支持get/post,必须配合type="submit"使用,且需与formaction配合才能改变提交地址和方法;大小写敏感,IE9及以下不支持。

formmethod 只能切到 get 或 post,其他值如 delete、put 会被浏览器静默忽略或降级为 get —— 这是前端调试时最常卡住的地方。
formmethod 必须配合 type="submit" 才生效
它只作用于 <button type="submit"> 或 <input type="submit">,写在普通 <button> 或 <form> 标签上无效,浏览器直接忽略。
- ✅ 正确:
<button type="submit" formmethod="get">预览</button> - ❌ 无效:
<button formmethod="get">预览</button>(缺type="submit") - ❌ 无效:
<form method="post" formmethod="get"></form>(formmethod不是<form>的属性)
不配 formaction 就等于白设 formmethod
formmethod 只改请求方法,不改地址;如果没写 formaction,所有按钮仍发往 <form> 的 action,哪怕你点了「取消」按钮,数据也照样 POST 到 /save。
- 想让「预览」走 GET 到
/preview,必须同时写:<button type="submit" formmethod="get" formaction="/preview">预览</button> -
formaction优先级高于<form action>,且每个按钮可独立指定 -
formaction=""(空字符串)会被忽略,不是“当前页”,而是回退到表单默认action
大小写敏感 + 兼容性陷阱
formmethod 值必须是小写 get 或 post,GET、Post 等写法在部分旧浏览器中会失效,回退到表单默认 method。
立即学习“前端免费学习笔记(深入)”;
- IE 10+、Chrome、Firefox、Safari、Opera 支持;IE 9 及更早版本完全不识别
formmethod和formaction - 若需兼容 IE,只能用 JS 动态改
form.method和form.action,或直接用fetch拦截提交 - 后端必须显式支持对应方法:比如
formmethod="get"提交,后端不能只读$_POST或req.body
真正容易被忽略的点是:它只影响原生表单提交行为。一旦你用 event.preventDefault() + fetch,formmethod 就彻底失效——这时候它只是个无意义的 HTML 属性。


















