我从来没有实现过这个,但我已经研究过类似的问题,这就是我会尝试的。
先试试这个
首先,我会看看您是否可以简单地为当前具有焦点的元素上的 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。