如何禁用 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 用户已经可以使用 b
和 Shift
+ 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>
我在 div 中有一组按钮,其中一些 javascript 可以在它们之间移动焦点以响应箭头键事件。
当我用 NVDA/Firefox/Windows 测试时,NVDA 似乎覆盖了我的箭头键处理程序并根据自己的规则移动焦点。这是一个问题,因为我的小部件是高度可定制的、动态的和响应式的——所以移动焦点的规则非常复杂。
Voiceover 和 ChromeVox 都没有这种行为。
我注意到向每个按钮添加 role="gridcell" 似乎可以解决此问题,但我不想这样做,因为这意味着屏幕阅读器不会将我的按钮视为按钮。我也真的不想更改 html 结构(例如,将每个按钮包装在另一个元素中),除非绝对必要。
有没有办法(例如 aria 或专有属性)告诉 NVDA 不要将自己的箭头键行为应用于按钮?
考虑到通过覆盖用户的预期行为,您 运行 可能会创建一个完全无法使用,甚至无法访问的界面。
我强烈建议不要尝试这样做。
无论如何,您添加的任何试图覆盖它的 ARIA 都会影响非 NVDA 用户。 NVDA 拦截方向键,因此 JavaScript 在 NVDA 已经对方向键做出反应之前无法采取行动。
请注意,NVDA 用户已经可以使用 b
和 Shift
+ 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>