tabindex在表格中不起作用的常见原因是表格元素本身不可聚焦,需设为tabindex="0"且支持焦点;真正生效的是表单控件自身的tabindex值,按数值升序或DOM顺序参与tab流程。

tabindex 在表格中不起作用的常见原因
表格本身不是可聚焦容器,tabindex 设在 <table>、<tr> 或 <td> 上通常无效——浏览器不会把它们加入 tab 顺序,除非显式设为 tabindex="0" 且元素本身支持焦点(比如有 contenteditable 或是表单控件)。真正起作用的是表单元素自身的 tabindex 值。
给 input/select/textarea 设置 tabindex 的实际效果
只要表单控件有 tabindex 属性,就能参与 tab 顺序。值为正整数(如 tabindex="1")时按数值升序跳转;值为 0 时按 DOM 顺序插入到自然 tab 流中;值为 -1 表示不可通过 tab 进入,但可通过脚本聚焦。
-
tabindex="1"和tabindex="2"的控件会优先于所有tabindex="0"元素跳转 - 多个相同
tabindex值(如都设为1)时,仍按 DOM 顺序走,不是“随机”或“报错” - 如果某单元格里有
<input tabindex="3">,而它前面的<select tabindex="2">在另一行更靠右的位置,tab 仍会先到tabindex="2",再跳到tabindex="3"——和表格行列无关,只看tabindex数值 + DOM 位置
表格结构对 tab 顺序的隐性影响
即使没设 tabindex,浏览器默认按 HTML 源码顺序聚焦:从上到下、从左到右遍历每个 <tr>,再按 <td> 内的表单控件顺序。这意味着:
- 嵌套在
<td>里的<div><input></div>仍按<input>在源码中的位置算顺序 - 用 CSS
display: flex或grid改变视觉排列,不影响 tab 顺序——DOM 顺序才是唯一依据 - 如果某
<td>包含两个<input>,它们的默认 tab 顺序就是书写先后,无需额外设tabindex
容易被忽略的 tabindex="-1" 使用场景
tabindex="-1" 不只是“禁用 tab”,而是保留脚本聚焦能力。在表格中常用于临时跳过某个字段,但又需要通过 JS 触发聚焦(比如校验失败后自动 focus 到第一个错误项)。
立即学习“前端免费学习笔记(深入)”;
示例:<input id="email" tabindex="-1"> → 用户 tab 不会停在这里,但 document.getElementById('email').focus() 仍有效。
注意:若整个表格区域需键盘导航(比如用方向键切换单元格),tabindex="-1" 配合 role="grid" 和 ARIA 属性才是正解,单纯靠 tabindex 无法实现表格级导航。



















