单选按钮互斥仅取决于name属性是否统一且正确——name必须完全一致(大小写敏感),value须有意义且唯一,label需一对一绑定,checked应直接写在html中。

单选按钮在表格里能正常互斥,只取决于 name 属性是否写对——其他所有问题,比如点不了、提交没值、JS取不到,90% 都是 name 没统一或写错了。
单选按钮必须用相同 name 才能互斥
浏览器根本不看你在哪一行哪一列,只认 name 字符串。同一组要互斥的按钮,name 必须完全一致(大小写敏感),否则就是多个独立开关。
- 想让整张表只能选一个单元格?所有
input用同一个name,比如name="selected-cell" - 想让每行各自独立二选一(如“通过/驳回”)?每行用不同
name,比如name="decision-1001"、name="decision-1002" - 复制粘贴时最容易漏改
name,导致看似一组实则失效;检查时直接在 Elements 面板里搜name=看值是否真一致
value 必须设,且要有意义
value 不是显示文字,是提交和 JS 读取时唯一依赖的标识。没设 value 的单选按钮,提交后字段值为空字符串或 on,后端收不到有效数据。
- 表格每行代表一条记录(如用户 ID 为 123),对应单选按钮的
value推荐写成value="123-approve"或value="123-reject" - 避免用
value="1"、value="true"这类无上下文数字或布尔字面量,JS 解析时容易歧义 - 服务端接收时只拿到一个
value字符串,不是数组,也不是对象
label 必须一对一包裹或正确关联
用户习惯点击文字选中,但原生 input[type="radio"] 只响应小圆圈区域。不配 label,等于默认禁用一半点击面积。
- 推荐写法:
<label><input type="radio" name="..." value="...">同意</label>(input在label内,自动绑定) - 不推荐写法:
<label for="xxx">同意</label><input id="xxx" type="radio">——容易漏写id或拼错for值 - 绝对禁止:
<label><input><input></label>,这会让两个按钮同时被触发
默认选中用 checked,别靠 JS 补
checked 是 HTML 布尔属性,有即生效。JS 动态设 checked = true 或模拟 click,会延迟、不可 SSR、且在表单重置时失效。
- 服务端渲染或静态页,直接写
<input ... checked>(无需checked="checked") - 同一组里多个
checked,浏览器只认最后一个,属于无效 HTML - 如果初始状态由后端决定,就把
checked当作模板变量注入,而不是等 DOM 加载完再操作
真正容易被忽略的不是怎么写,而是每次加新行时是否同步更新了 name 和 value——尤其在循环生成表格的场景下,name 错一位,整行就脱离分组;value 缺一个 ID,JS 就定位不到具体哪条记录被选中。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











