如何禁用NVDA的箭头键导航

man*_*nan 3 javascript accessibility screen-readers nvda

我在div内有一个按钮集合,其中包含一些JavaScript以响应箭头键事件在它们之间移动焦点。

当我使用NVDA / Firefox / Windows进行测试时,似乎NVDA会覆盖我的箭头键处理程序,并根据其自身的规则移动焦点。这是一个问题,因为我的窗口小部件具有高度可定制性,动态性和响应能力-因此,移动焦点的规则非常复杂。

Voiceover和ChromeVox都不具有此行为。

我注意到向每个按钮添加role =“ gridcell”似乎可以解决此问题,但是我不希望这样做,因为这意味着屏幕阅读器不会将我的按钮视为按钮。除非绝对必要,否则我也真的不想更改html结构(例如,将每个按钮包装在另一个元素中)。

是否有一种方法(例如aria或专有属性)告诉NVDA不要将自己的箭头键行为应用于按钮?

slu*_*ous 7

如果所有按钮都位于容器(span 或 div)中,则可以将 role=application 添加到容器中,这将强制所有键盘事件转到您的应用程序而不是辅助技术。不过,应该非常谨慎地使用 Role=application。

<div role=application>
   <button>alpha</button><br>
   <button>beta</button><br>
   <button>gamma</button><br>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢 - 我最终通过向容器添加 role="toolbar" 做了一些非常类似的事情;它解决了我不需要的 NVDA 箭头键拦截问题。从语义上讲,它是完全正确的,因为我的小部件是“用于对一组控件进行分组的容器,例如按钮、菜单按钮或复选框”,所以我对此非常满意。 (3认同)

aar*_*ian 6

考虑到通过覆盖用户的预期行为,您将冒着创建完全无法使用甚至无法访问的界面的风险。

强烈建议您不要尝试这样做。

无论如何,您添加以尝试覆盖它的任何ARIA都可能影响非NVDA用户。NVDA会截获箭头键,因此,在NVDA对箭头键做出反应之前,JavaScript无法起作用。

请注意,NVDA用户已经可以使用bShift+ 在按钮之间导航b,因此他们无需依赖Tab

现在,所有这些,您可能会发现一个现有的模式,该模式类似于您在WAI-ARIA创作实践中试图实现的模式。

如果您可以概述自己的目标并举例说明,则有可能我可以确定一些现有的模式或技术,这些模式或技术可以使您实现目标,而又不会冒险遭受破坏。

  • 感谢您的回复。实际上,我最初是根据您链接的 ARIA 创作实践页面的“工具栏”部分创作了该小部件 - http://w3c.github.io/aria-practices/#toolbar。但我意识到我没有将 role=toolbar 应用于容器:添加该角色似乎使 NVDA 的行为变得更加合理。该小部件基本上是一个“按钮网格”,允许将符号输入到输入区域。 (2认同)