我有一段简单的代码,我试图在使用 NVDA 屏幕阅读器时使键盘可以访问。
具体来说,我有一个具有“按钮”角色的 div,其中嵌套了另一个具有“按钮”角色的 div。每个 div 都有一个不同的 onkeydown 事件,当用户切换到该 div 并按下“回车”时会触发该事件。
当我没有打开 NVDA 屏幕阅读器时,这个键盘功能都可以正常工作。
但是,当我打开屏幕阅读器时,嵌套的 keydown 事件不再触发。相反,即使嵌套事件是具有焦点的事件,也只会触发父事件。
但是,如果我手动将 NVDA 从“浏览模式”更改为“焦点模式”(通过按 NVDA 键 + 空格键),则按键事件将再次按需要工作。
不幸的是,我不能期望使用 NVDA 的人知道手动切换到“对焦模式”。它要么需要自动更改为“聚焦模式”,要么需要在“浏览模式”下工作。
这是代码:
HTML:
<div role="button"
tabindex="1"
onkeydown="keyEvent(event, outerDivAction)"
class="outerDiv">
Outer Div
<div role="button"
tabindex="1"
onkeydown="keyEvent(event, innerDivAction)"
class="innderDiv">
Inner Div</div>
</div>
<div class="result"></div>
JavaScript:
function outerDivAction(event) {
event.stopPropagation();
console.log('outer div');
$('.result').html('<p>outer div!</p>');
}
function innerDivAction(event) {
event.stopPropagation();
console.log('inner div')
$('.result').html('<p>inner div!</p>');
}
function keyEvent(event, callback) {
event.stopPropagation();
if (event.which === 13) {
callback(event);
}
}
$('.outerDiv').click(outerDivAction);
$('.innderDiv').click(innerDivAction);
您还可以在此处查看 codepen:http: //codepen.io/jennEDVT/pen/Yprova
任何人都可以提供的任何帮助将不胜感激!
ps 我知道,如果我采用嵌套的 div 并将其移动,使其不再嵌套,而是第一个 div 的兄弟,那么一切都按预期工作。不幸的是,这不是一个选择。div 需要嵌套。