dom属性tabindex

87 阅读2分钟

一、tabindex值及其含义

键盘导航(Tab 键)​​JS 聚焦​聚焦顺序规则​
tabindex="-1"❌ 不可聚焦✅ 支持不参与 Tab 键序列,只能通过 element.focus() 编程聚焦
tabindex="0"✅ 可聚焦✅ 支持按 DOM 顺序排列,位于所有正值元素之后
tabindex="≥1"✅ 可聚焦✅ 支持​数值越小优先级越高​​,同数值时按 DOM 顺序排列,且所有正值元素优先于 0 和未设置元素

二、值为-1、0和 ≥1 核心区别

1. ​-1 vs 0:聚焦能力的本质差异​

  • -1​:仅支持​​编程式聚焦​​(如点击按钮触发 JS 聚焦到弹窗),适合需主动控制焦点的场景。

  • 0​:​​自然融入 Tab 序列​​,适合需保持默认键盘导航逻辑的元素(如将 <div> 改造为可聚焦控件)。

2. ​≥1 的陷阱与最佳实践​

  • ​优先级问题​​:值越大越靠后(如 1→2→3),但同值元素按 DOM 顺序排序。

  • ​慎用场景​​:过度使用正值会破坏文档流逻辑,导致可访问性下降。​​推荐优先用 0 和 DOM 结构调整​​,仅在必要时用正值。

三、典型应用场景

场景​​推荐值​​示例说明​
​模态框(Modal)​tabindex="-1"打开时 JS 聚焦到弹窗,但禁止用户用 Tab 键跳出弹窗。
​自定义交互组件​tabindex="0"使 <div role="button"> 支持键盘操作,融入自然 Tab 序列。
​表单字段跳转优化​tabindex="1"强制指定表单的填写顺序(如地址选择后自动聚焦邮编输入框)。
​动态内容插入​tabindex="-1"AJAX 加载的内容需立即聚焦时(如新消息提示),但避免干扰原有 Tab 顺序。

四、注意事项​

  1. ​可访问性风险​​:

    • 避免滥用正值导致逻辑混乱(如 tabindex="100" 跳过中间内容)。

    • 非交互元素(如纯文本)无需设置 tabindex

  2. ​浏览器兼容性​​:

    • 全平台主流浏览器均支持,但 Safari 对部分动态聚焦行为存在限制。
  3. ​焦点事件​​:

    • tabindex="-1" 仍可触发 focus/blur 事件,适合结合键盘事件(如方向键导航)。