为什么Javascript IF keyCode === Enter键或空格键不适用于NVDA屏幕阅读器?

时间:2018-09-10 16:27:53

标签: javascript keyboard accessibility screen-readers nvda

我正在研究客户端站点的可访问性,并且正在使用JQuery / Javascript检测是否按下Enter键或空格键,这非常有用...

$(document).addEventListener('keydown', navKeyboardHandler);

navKeyboardHandler = function(e) {
    console.log('a keyboar key was pressed'); // This does work

    if (e.keyCode === 13 || e.keyCode === 32) { // Keyboard Enter OR Spacebar pressed
        console.log('enter or spacebar key pressed ! ! !'); // This does NOT work
    }
};

...直到我打开NVDA来使用屏幕阅读器测试键盘导航!它只是完全忽略了此声明。有时,这将触发。就像每10或20次键盘按一次。选择触发的时间不一致。

需要修改我的IF语句中的哪些内容?任何帮助将不胜感激。我正在Windows上的Chrome和Firefox上对此进行测试。

3 个答案:

答案 0 :(得分:0)

我通过他们悠闲的渠道与无障碍社区的人们联系: web-a11y.slack.com

,有人提供了 体面的 解决方案

  

它可能不会触发,因为如果您处于浏览模式,则NVDA会拦截密钥,这很正常。如果您要手动切换到聚焦模式(插入+空格-您会听到“打字机”的声音),则代码应该通过。

答案 1 :(得分:0)

可能不是JavaScript。它可能在HTML中。某些角色和aria属性将告诉屏幕阅读器是处于浏览模式还是焦点模式(或应用程序模式)。

  

例如,当 tablist tab 角色用作 tab小部件设计模式的一部分时,请使用tab键移动将焦点集中在集合中的第一个选项卡上会使Windows屏幕阅读器自动切换到应用程序模式。从那时起,所有键盘交互都由脚本处理。

More about screen reader interaction modes here

有关NVDA User Guide中NVDA浏览模式与焦点模式的更多信息

根据要构建的窗口小部件的类型(如果要提供更多信息和HTML代码,也许我可以详细说明),您可能需要添加不同的角色或aria属性,以告知屏幕阅读器自动切换到最适当的模式。我建议您仔细检查WAI-ARIA Design pattern,了解您要构建的任何类型的小部件。

此链接提供了有关哪些小部件触发焦点模式http://accessibleculture.org/articles/2012/09/aria-widgets-and-focus-forms-mode-support/

的更多信息。

答案 2 :(得分:0)

在小部件html中添加role =“ application”并尝试一下,它对我有用。