我从来没有实现过这个,但我已经研究过类似的问题,这就是我会尝试的。
先试试这个
首先,我会看看您是否可以简单地为当前具有焦点的元素上的 Tab 键触发一个keypress
事件。对于不同的浏览器,可能有不同的方法来执行此操作。
如果这不起作用,你将不得不更加努力......
引用 jQuery 实现,您必须:
- 听 Tab 和 Shift+Tab
- 知道哪些元素可以制表
- 了解 Tab 键顺序的工作原理
1. 听 Tab 和 Shift+Tab
听 Tab 和 Shift+Tab 可能在网络上的其他地方都有很好的介绍,所以我会跳过那部分。
2. 知道哪些元素是可制表的
知道哪些元素可以制表是比较棘手的。基本上,如果一个元素是可聚焦的并且没有tabindex="-1"
设置属性,则它是可选项卡的。那么我们必须询问哪些元素是可聚焦的。以下元素是可聚焦的:
input
、select
、textarea
、button
和object
未禁用的元素。
a
和area
具有href
或具有tabindex
集合数值的元素。
- 任何具有
tabindex
集合数值的元素。
此外,一个元素只有在以下情况下才是可聚焦的:
- 它的祖先都不是
display: none
。
- 的计算值
visibility
是visible
。这意味着要visibility
设置的最近祖先的值必须为visible
。如果没有visibility
设置祖先,则计算值为visible
。
更多细节在另一个Stack Overflow 答案中。
3. 了解 Tab 键顺序的工作原理
文档中元素的 Tab 键顺序由tabindex
属性控制。如果未设置任何值,tabindex
则有效0
。
tabindex
文档的顺序是:1, 2, 3, ..., 0。
最初,当body
元素(或没有元素)具有焦点时,Tab 键顺序中的第一个元素是最低的非零元素tabindex
。如果多个元素具有相同的元素tabindex
,则按文档顺序进行,直到到达具有该元素的最后一个元素tabindex
。然后你移动到下一个最低点tabindex
,这个过程继续。最后,用零(或空)完成这些元素tabindex
。