我正在实现W3C 的 WCAG2.0 技术文档中描述的跳转到主要内容技术,但是在激活链接时我正在努力更新键盘焦点。(请注意,我正在最新的 Chrome 公开版本上对此进行测试)。
首先,这是我的 JavaScript 函数:
function skipToMainContent() {
var hash = window.location.hash.substring(1);
if (hash === "main") {
var el = document.getElementById(hash);
el.tabIndex = 0;
el.focus();
}
}
skipToMainContent();
这个函数的作用是首先hash
从 URL 中拉取 ; 并删除#
; 然后它检查哈希变量的值是否等于“main”;如果是这样,它就会获取我们的id="main"
元素,将其设置tabIndex
为 0 以使其可聚焦,然后赋予它焦点。
如果我访问http://example.com/#main
,该skipToMainContent()
函数被触发并且我的键盘焦点被相应地设置。当我点击我的内容区域中tab的第一个交互元素时,我会集中注意力。main
(请注意,如果没有此功能,Chrome 会将第一个交互元素集中在页面上,因此此功能在这里肯定有效)。
但是,当我尝试通过页面上的链接触发此功能时,上述内容不适用:
<a href="#main" onclick="skipToMainContent()">
Skip to Main Content
</a>
<nav>...</nav>
<main role="main" id="main">...</main>
单击我的“跳到主要内容”链接后,该skipToMainContent()
功能被适当地触发,并且我的main
元素被赋予了tabIndex
of 0
,但它似乎没有得到关注。如果我tab在单击我的链接后按下键,则我的第一个交互元素将nav
被聚焦。
我需要做什么来确保当我的“跳过”链接被点击时,我的main
元素被聚焦?
请注意,我已经尝试在调用之前添加this.blur()
和添加,但是下一个重点元素是我的“跳过”链接。document.activeElement.blur()
el.focus()