能用,但必须同时满足三个硬性条件:按钮是type="submit"、form属性值严格匹配目标的id、目标必须存在于当前文档中。

能用,但必须同时满足三个硬性条件:按钮是 type="submit"、form 属性值严格匹配目标 <form></form> 的 id、目标 <form></form> 必须存在于当前文档中。 缺一不可,少一个就静默失效——点下去没反应,控制台也不报错。
button 的 form 属性为什么点了没反应
最常见原因是按钮类型不对。写成 <button form="login-form">提交</button> 是无效的,它默认是 type="button",根本不触发提交逻辑。
- 必须显式写
type="submit",哪怕只加这一项:<button type="submit" form="login-form">提交</button> -
form值必须和目标<form id="login-form"></form>的id完全一致(大小写、连字符、下划线都算) - 如果目标
<form></form>被 JS 动态移除或还没加载完成,form属性也会失效,且不提示 - IE 10 以下完全不支持,现代浏览器(Chrome 10+、Firefox 4+、Safari 5.1+、Edge 12+)均可用
form 属性对 <input type="submit"> 同样有效
不只是 <button></button>,<input type="submit"> 和 <input type="image"> 也支持 form 属性,用法一致。
-
<input type="submit" form="search-form" value="全局搜索">可放在页脚或弹窗里,照样提交id="search-form"的表单 -
<input type="image" src="go.png" form="search-form">也能跨表单提交,但注意:某些旧版 Safari 对type="image"+form支持不稳定 -
type="reset"或type="button"不支持form属性,写了也白写
提交时采集哪些数据?form 属性只管“归属”,不管“位置”
按钮点下去后,浏览器只收集目标 <form id="xxx"></form> 内部所有带 name 的可提交控件(<input>、<select></select>、<textarea></textarea>),完全无视按钮自己在哪。
立即学习“前端免费学习笔记(深入)”;
- 按钮即使放在另一个
<form></form>里面,只要form="target-id",提交的仍是target-id表单的数据 - 外部
<input>控件(比如模态框里的 CSRF token)可通过自身form="main"关联进来,但必须有name属性,否则不会进FormData -
disabled的控件无论是否在外置,都不会被提交;readonly的则照常提交 - 按钮自身的
name和value默认不随表单一起发送,除非用formaction/formmethod触发 submit 事件并监听event.submitter
最容易忽略的一点:当多个按钮共用同一个 form 属性指向同一表单时,event.submitter 在 submit 事件里能准确告诉你点的是哪一个——但 Safari 15.4 之前不支持这个属性,得靠 data-* 手动标记。



















