formmethod仅对type="submit"或type="image"控件生效,需在<form>内或通过form="id"绑定,值限于"get"/"post",enctype="multipart/form-data"时formmethod="get"会静默回退,JS调用form.submit()或fetch时完全失效。

能覆盖表单默认提交方式的,只有 formmethod 属性,且只对 type="submit" 或 type="image" 的控件生效——其他写法全是徒劳。
为什么 formmethod 没生效?常见失效场景
浏览器根本不会读取 formmethod,除非满足全部前提条件:
-
button或input的type必须是"submit"(不是"button"、"reset",也不是没写type) - 该控件必须在
<form>标签内部,或通过form="form-id"显式绑定到某个表单 -
formmethod值只能是"get"或"post"(大小写不敏感,但"PUT"、"DELETE"会被静默降级为GET) - 如果表单设了
enctype="multipart/form-data",又给按钮写了formmethod="get",浏览器会强制回退到表单原始method(通常是POST),且不报错
formmethod 和 formaction 能一起用吗?怎么配合
可以,而且这是标准用法。两者互不干扰,各自覆盖不同维度:
-
formaction改的是请求地址(URL),优先级高于<form action> -
formmethod改的是请求方法(GET/POST),优先级高于<form method> - 它们可共存于同一个按钮:
<button type="submit" formaction="/export" formmethod="post">导出</button> - 若同时用了
formtarget,还能控制打开方式(如formtarget="_blank")
注意:所有字段(name 值)仍按原表单结构一并提交,formmethod 不过滤、不删减任何输入项。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
立即学习“前端免费学习笔记(深入)”;
JS 提交时 formmethod 还管用吗?
完全不管用。只要调用 form.submit() 或用 fetch/axios 手动发请求,formmethod 就彻底失效。
-
form.submit()总是走<form method>定义的方式,无视任何按钮上的formmethod - 想让 JS 提交也走不同 method,得自己构造请求:
fetch(url, { method: 'POST' }) - 如果按钮绑了
onclick="event.preventDefault(); ...",那原生提交流程已被阻断,formmethod根本没机会触发
最容易被忽略的一点:多个 type="submit" 按钮共存时,只有被点击的那个会把它的 name 和 value 发送到后端;没设 name,这个按钮就等于“不存在”——后端收不到任何标识,无法判断用户点了哪个操作。


















