我在div中有一组按钮,有一些javascript可以在它们之间移动焦点以响应箭头键事件。
当我使用NVDA / Firefox / Windows测试时,似乎NVDA会覆盖我的箭头键处理程序并根据自己的规则移动焦点。这是一个问题,因为我的小部件具有高度可定制性,动态性和响应性 - 因此移动焦点的规则非常复杂。
Voiceover和ChromeVox都没有这种行为。
我注意到添加了角色=" gridcell"每个按钮似乎解决了这个问题,但我不想这样做,因为这意味着屏幕阅读器不会将我的按钮视为按钮。我也真的不想改变html结构(例如将每个按钮包裹在另一个元素中),除非它是绝对必要的。
是否有办法(例如咏叹调或专有属性)告诉NVDA不要将自己的箭头键行为应用于按钮?
答案 0 :(得分:6)
考虑通过覆盖用户的预期行为,您可能会面临创建完全无法使用或甚至无法访问的界面的风险。
我强烈建议不要尝试这样做。
无论如何,您添加的任何ARIA都试图覆盖它可能会影响非NVDA用户。 NVDA拦截箭头键,因此在NVDA已经对箭头键做出反应之前,JavaScript无法动作。
请注意,NVDA用户可以使用b
和Shift
+ b
在按钮之间导航,因此他们无需依赖Tab
。
现在,尽管如此,您可能会发现一个与您在WAI-ARIA Authoring Practices中尝试实现的模式类似的现有模式。
如果您可以概述目标并可能展示一个示例,我可以确定一些现有的模式或技术,这些模式或技术可以让您实现目标,而不会有破坏经验的风险。
答案 1 :(得分:3)
如果您的所有按钮都在容器中(span或div),您可以将role = application添加到容器中,这会强制所有键盘事件转到您的应用程序而不是辅助技术。但是,应该非常谨慎地使用Role = application。
<div role=application>
<button>alpha</button><br>
<button>beta</button><br>
<button>gamma</button><br>
</div>