formmethod属性仅对type="submit"按钮生效,覆盖单次点击的提交方式,值限于"get"或"post",需配合name/value使用,且不适用于enctype="multipart/form-data"时的"get"。

formmethod 属性只对 type="submit" 按钮生效
你写 formmethod="post" 却没生效?先检查按钮是不是 type="submit"。如果是 type="button" 或 type="reset",浏览器直接忽略该属性——它根本不参与表单提交流程。
常见错误:用 <button type="button" formmethod="post">提交</button>,点了没反应,因为压根没触发 submit 行为。
- 必须是
<button type="submit">或<input type="submit"> - 按钮需在
<form>内,或通过form="form-id"显式关联 - 值只能是
"get"或"post"(大小写不敏感,但别写"PUT"——会静默降级为GET)
formmethod 覆盖的是单次点击,不是整个表单
它不是“重设表单默认 method”,而是“这次点我,就用这个 method”。表单本身的 method 属性不变,其他按钮、回车提交、JS 的 form.submit() 全都照旧走原 method。
例如:<form action="/api" method="get"><button type="submit" formmethod="post">删除</button></form>,点删除按钮发 POST,但按回车仍发 GET。
立即学习“前端免费学习笔记(深入)”;
-
formmethod优先级高于<form method>,但仅限该按钮的点击事件 - JS 中调用
form.submit()不受formmethod影响,仍走表单原始method - 想让 JS 提交也走不同 method?得手动构造 fetch 请求,别依赖原生提交
别漏掉 name 和 value,否则后端分不清哪个按钮被点了
多个 type="submit" 按钮共存时,只有被点击的那个会作为键值对发给后端(如 submit=delete)。没设 name,这个字段就根本不会出现在请求里。
示例:<button type="submit" name="action" value="draft" formmethod="post">存草稿</button>,后端收到 action=draft;如果没 name,啥都收不到。
-
name是必填项,不是可选装饰 -
value建议语义化(如"save"、"delete"),方便后端路由判断 - 若同时用了
formaction,name/value仍随请求发出,和地址、method 无关
enctype="multipart/form-data" 时 formmethod="get" 会失效
GET 请求不支持文件上传,所以当表单设了 enctype="multipart/form-data",又给按钮写了 formmethod="get",浏览器会自动回退到表单的原始 method(通常是 post),且不报错、不提示。
现象:点了按钮,Network 面板里看到的仍是 POST,不是你写的 GET——这不是 bug,是浏览器强制纠正。
- 含
<input type="file">的表单,formmethod只能设"post" - 想用 GET 做搜索类操作?确保表单没文件字段,也没设
enctype - 真要混合场景(比如带附件的搜索),得用 JS + fetch 手动处理,绕过原生限制
name、或者以为改了 formmethod 就能让整个表单变行为。它只管「这一次点我」,别的都不管。



















