### [HTML表格行选择:单选框的两种 name 写法](https://www.huociguo.com/article/1453) **Published:** 2026-09-27T04:12:48 **Author:** 米了 **Excerpt:** 表格里的单选框,成败全在 。每行独立单选 → 按行唯一,如 ;整表只选一项 → 所有 共用一个 ,如 。表格里… 表格里的单选框,成败全在 `name`。 每行独立单选 → `name` 按行唯一,如 `name="row_1001"`; 整表只选一项 → 所有 `radio` 共用一个 `name`,如 `name="selected_row"`。 ![](https://api.huociguo.com/wp-content/uploads/2026/09/20260927120800154-27042004c0-1.png "20260927120800154-27042004c0-1") 表格里的单选框选不对,问题从来不在 JS,而在 name 写成了同一个还是不同的。 ## 每行独立单选:name 必须按行唯一 表格每行需要被独立点选时(点击某行触发编辑、删除),所有单选框不能共用一个 `name`。共用的后果是点第 5 行会取消第 1 行,与“每行独立”的诉求完全相反。 正确做法是给每一行的单选框分配专属 `name`: ``` ``` - `name` 取自后端返回的主键或 ID,不用数组索引。表格排序、分页之后索引会错位。 - `value` 直接写数据 ID,如 `value="1001"`,后续取值不必再回查 DOM 结构。 - `id` 与 `label` 配套不能省。省略后点击文字无法触发选择,可访问性也会下降。 - 使用 React、Vue 等框架时,`name` 在重渲染后要保持稳定,重复或丢失会重置选中状态。 `label` 两种写法效果相同,结构稳定性不同。表格场景推荐显式关联,隐式包裹在嵌套结构里更容易误触: ``` ``` ## 整表只选一项:所有单选框共用同一 name 业务要求全表只能选一项时(批量操作前指定基准行),所有单选框的 `name` 必须完全一致: ``` ``` - 默认选中项由 HTML 直接带 `checked` 属性,不靠 JS 事后设置。SSR 或首屏渲染快于脚本执行时,后者会失效。 - 提交表单时,只有被选中那一项的 `value` 会被发送,其余同名项不参与提交。 - 用 CSS 隐藏原生样式后,`appearance: none` 会一并抹掉焦点指示,需补回焦点与可访问性支持。 ## 获取当前选中行的 value 不要遍历所有单选框再判断 `checked`,效率低且易漏。按 `name` 精准定位即可: ``` const selected = document.querySelector('input[name="selected_row"]:checked'); const rowId = selected ? selected.value : null; ``` 未选中任何项时返回 `null`,该 `name` 也不会出现在提交数据中,后端需处理空值。 **Categories:** HTML5 ---