我有一段简单的代码,我试图在使用 NVDA 屏幕阅读器时使键盘可访问。
具体来说,我有一个角色为“按钮”的 div,另一个角色为“按钮”的 div 嵌套在其中。每个 div 都有一个不同的 onkeydown 事件,当用户切换到该 div 并按下“enter”键时会触发该事件。
当我没有打开 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>
Run Code Online (Sandbox Code Playgroud)
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); …Run Code Online (Sandbox Code Playgroud)