我有一个将焦点锁定在对话框中的函数。
<div role="dialog" aria-label="test dialog">
<input type="text" id="a"/><br />
<input type="text" id="b"/><br />
<input type="text" id="c"/><br />
<input type="text" id="d"/><br />
<button id="buttonA">a</button>
<button id="buttonB">b</button>
<button id="buttonC">c</button>
</div>
当使用Tab / Shift选项卡时,它工作正常,但现在我开始用JAWS测试我的代码,我发现箭头键的行为不同。
锁定对话框类似于这个小提琴中的逻辑: https://jsfiddle.net/zw6w5gx2/
我尝试将箭头的键码添加到'if'语句中,但是我注意到这些键没有触发事件。
我的对话框有角色=对话框,当使用NVDA时,足以使箭头键恢复正常行为,但它不适用于JAWS。
我确实看到使用role = application时一切都很好,但我不想使用这个角色,因为它不是我在这里需要的。
有什么想法吗?
答案 0 :(得分:1)
很抱歉,但你在这里做的是不良做法和同时过度编码
首先,最新版本的JAWS具有内置功能,可通过当前对话框限制虚拟光标,因此无需重新实现此功能。
其次,您不应以任何方式限制您的用户。如果您以编程方式锁定焦点,对于屏幕阅读器用户来说,这类似于一个假想的过程,在您执行操作时,除了对话框之外,您将突然使所有显示器变暗。这是不可接受的,这就是JAWS没有给你这种能力的原因
第三,为了通过“按Tab键 - 获得具体输入”来实现您的效果,您只需指示正确的tabindex
属性,然后所有Tab / Shift + Tab移动都将按预期进行。<登记/>
问题是网页上的JAWS使用称为虚拟光标的东西进行操作。它允许盲人用户使用快捷键浏览页面,即字母(h
按标题导航,按b
按钮,依此类推等等)。这就是为什么你看到这么奇怪(乍一看(行为)
但是,如果你绝对需要做你现在做的所有这些事情(并且你有权这样做,尽管我之前说过),role="application"
是你最好的朋友:因此用户肯定会知道他/她的钥匙不会像他/她期望的那样运作,这是正常的,因为开发人员就这样做了。
答案 1 :(得分:0)
下颌使用“的虚拟光标强>”模式和“的应用强>”模式尝试使用“插入+ z”的模式之间切换时,当在应用模式中的焦点被移动表现不同当“虚拟光标”钳口使用DOM结构来聚焦下一个/前一个元素时,可选元素。当使用“扫描”模式“大写锁定+空格”启用/禁用时,其他辅助功能工具(如讲述人)也会发生同样的情况。