如何禁用 NVDA 的箭头键导航

How do I disable NVDA's arrow key navigation

我在 div 中有一组按钮,其中一些 javascript 可以在它们之间移动焦点以响应箭头键事件。

当我用 NVDA/Firefox/Windows 测试时,NVDA 似乎覆盖了我的箭头键处理程序并根据自己的规则移动焦点。这是一个问题,因为我的小部件是高度可定制的、动态的和响应式的——所以移动焦点的规则非常复杂。

Voiceover 和 ChromeVox 都没有这种行为。

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

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

考虑到通过覆盖用户的预期行为,您 运行 可能会创建一个完全无法使用,甚至无法访问的界面。

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

无论如何,您添加的任何试图覆盖它的 ARIA 都会影响非 NVDA 用户。 NVDA 拦截方向键,因此 JavaScript 在 NVDA 已经对方向键做出反应之前无法采取行动。

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

现在,综上所述,您可能会发现一个与您在 WAI-ARIA Authoring Practices.

中尝试实现的模式相似的现有模式

如果您可以概述您的 objective 并可能展示一个示例,我可能可以确定一些现有的模式或技术,这些模式或技术将使您能够实现您的目标不会有破坏体验的风险。

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

<div role=application>
   <button>alpha</button><br>
   <button>beta</button><br>
   <button>gamma</button><br>
</div>