我在一个 div 中有一组按钮,用一些 javascript 在它们之间移动焦点以响应箭头键事件。
当我使用 NVDA/Firefox/Windows 对此进行测试时,NVDA 似乎覆盖了我的箭头键处理程序并根据其自己的规则移动焦点。这是一个问题,因为我的小部件是高度可定制的、动态的和响应式的 - 因此移动焦点的规则非常复杂。
Voiceover 和 ChromeVox 都没有这种行为。
我注意到向每个按钮添加 role="gridcell"似乎可以解决此问题,但我不想这样做,因为这意味着屏幕阅读器不会将我的按钮视为按钮。我也真的不想更改 html 结构(例如,将每个按钮包装在另一个元素中),除非绝对必要。
有没有办法(例如 aria 或专有属性)告诉 NVDA 不要将自己的箭头键行为应用于按钮?
最佳答案
考虑到通过覆盖用户的预期行为,您可能会冒着创建完全无法使用甚至无法访问的界面的风险。
我强烈建议不要尝试这样做。
无论如何,您添加的任何试图覆盖它的 ARIA 都可能影响非 NVDA 用户。 NVDA 会拦截箭头键,因此 JavaScript 无法执行,直到 NVDA 已经对箭头键使用react。
请注意,NVDA 用户已经可以使用 b
和 Shift
+ b
在按钮之间导航,因此他们不需要依赖 制表符
。
现在,综上所述,您可能会发现一个与您在 WAI-ARIA Authoring Practices 中尝试实现的模式类似的现有模式.
如果您可以概述您的目标并可能展示一个示例,我可能可以确定一些现有的模式或技术,这些模式或技术将使您能够在不冒破坏体验的风险的情况下实现您的目标。
关于javascript - 如何禁用 NVDA 的箭头键导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41473174/