单选按钮互斥仅由name属性严格一致决定,大小写敏感且与DOM结构无关;value必须唯一标识上下文;label须一对一绑定;checked应直接写在HTML中。

单选按钮能互斥,只取决于 name 属性是否完全一致——其他所有问题,90% 都是 name 写错了或漏统一。
name 属性必须严格一致且大小写敏感
浏览器不看表格结构、不看 DOM 位置,只比对 name 字符串。同一组互斥按钮,name 值必须逐字相同(包括大小写、连字符、数字)。
- 错误示例:
name="row1"和name="Row1"是两组独立按钮 - 循环生成表格时,复制粘贴容易漏改
name="decision-{{id}}"中的{{id}},导致某行脱离分组 - 整表单选(如“仅选中一行操作”):所有 radio 用同一个
name="selected-row" - 每行独立二选一(如“通过/驳回”):每行用不同
name,如name="action-1001"、name="action-1002"
value 必须设,且要带上下文标识
value 不是显示文字,是唯一提交值和 JS 读取依据。没设 value 的按钮,提交后字段值为空字符串或 "on",后端无法解析。
- 推荐写法:
value="user-123-approve"或value="item-456-reject",包含 ID + 操作语义 - 避免写
value="1"、value="true"——JS 无法反推这是哪条记录的哪个状态 - 服务端只收到一个字符串,不是对象也不是数组;前端 JS 取值也只靠
el.value,别指望自动拆解
label 必须一对一包裹或精准 for/id 绑定
原生 input[type="radio"] 点击热区极小,不配 label 等于默认禁用一半交互面积。
立即学习“前端免费学习笔记(深入)”;
- 最简可靠写法:
<label><input type="radio" name="x" value="y">同意</label>(input 在 label 内,自动绑定) - 不推荐用
for/id:易漏写id、拼错for值,且多层嵌套时 id 冲突风险高 - 绝对禁止:
<label><input><input></label>——两个按钮同时被触发,HTML 无效
checked 应直接写在 HTML 中,别靠 JS 补
checked 是布尔属性,有即生效。JS 动态设置 checked = true 或模拟 click,会延迟、不可 SSR、且表单重置时失效。
- 服务端渲染或静态页,直接写
<input checked>(无需checked="checked") - 同一组多个
checked,浏览器只认最后一个,属于无效 HTML - 初始状态由后端决定时,把
checked当作模板变量注入,而不是等 DOM 加载完再操作
真正容易被忽略的不是怎么写,而是每次加新行时是否同步更新了 name 和 value——尤其在循环生成表格的场景下,name 错一位,整行就脱离分组;value 缺一个 ID,JS 就定位不到具体哪条记录被选中。



















