如何防止NVDA设置自动关注上次使用的HTML元素?

时间:2014-03-19 20:20:55

标签: firefox focus accessibility autofocus nvda

我们正在现有的Web应用程序上实现辅助功能。我们使用Firefox和NVDA。 关于我们的Web应用程序的一点介绍:我们的Web应用程序是具有多个步骤的表单(步骤1,步骤2:那些是不同的Web页面)。每个步骤都有一个上一个/下一个超链接,可以转到上一个或下一个步骤。在最后一步,用户可以看到他们的输入,并可以提交表单或返回更改值。当用户转到上一页以更改某些值时,我们放置一个#anchor,以便页面转到该锚点。然后,在Jquery中,我将焦点放在该锚之后的第一个可聚焦元素上。

除非NVDA处于活动状态,否则效果很好:

当NVDA处于活动状态时,NVDA强制关注最后一次当用户在此页面上时最后使用的HTML元素。就我而言,NVDA将重点放在Next超链接上。 NVDA覆盖了我在$(document).ready()函数中设置的焦点。

我尝试更改NVDA中的几乎所有设置但未找到解决我问题的设置。

我在网上搜索任何ARIA属性我可以设置告诉NVDA我会管理焦点和导航但是我没有找到任何东西。

任何人都知道如何解决此问题?

非常感谢!

3 个答案:

答案 0 :(得分:1)

我知道这已经有几个月了,但是我遇到了同样的问题,经过漫长的一夜撞击桌子后,我问了NVDA的bug跟踪器,结果证明这是奇怪的行为实际上是设计的(!)

无论如何,我找到了一个适用于我的修复程序,无论如何,使用Firefox 32和NVDA 2014.2

$(document).ready(function() {
        function resetTab(){
            document.getElementById('toplink').focus();
        }
        window.setTimeout(resetTab, 250);
    });

需要jQuery或其他检测加载窗口的方法。显然需要一个id为" toplink"的元素。也可以更改代码中的ID。如果这对您有用,请告诉我:))

答案 1 :(得分:1)

如DigitalToast所报道,该行为是设计使然,请参阅Focus cached on form submission #5351

直接,焦点没有被缓存。我们正在缓存用户在页面上的最后位置,这间接导致焦点发生变化。缓存用户的最后一个位置是必要的,以确保在页面之间来回导航,还原关闭的选项卡/窗口等使用户处于正确的位置,这是用户要求和期望的功能。不幸的是,它确实有您描述的副作用。

如果URL更改,则不会出现此问题,因此可能的解决方案可以是向查询字符串中添加随机参数

一个GET表单似乎不会受到影响(URL更改),直到它被提交相同的数据(URL相同),然后出现问题。

我还注意到,如果表单位于IFRAME中,则不会出现此问题

答案 2 :(得分:0)

  

就我而言,NVDA将重点放在Next超链接上。 NVDA覆盖了我在$(document).ready()函数中设置的焦点。

这听起来好像是一个人点击之前,你正在做

<a href="#" onClick="history.go(-1); return false;">Go back</a> 

我认为这可能是与浏览器相关的问题。有人记得你离开页面后的位置。由于您没有重新加载页面,只需返回,ready()不会再次触发。 making ready() fire again, was already asked的问题,可能会有所帮助。但根据我的假设,你可能会遇到一些问题determining if the user pressed back

  

我在网上搜索任何ARIA属性我可以设置告诉NVDA我会管理焦点和导航但是我没有找到任何东西。

ARIA在此无能为力。问题是您如何在应用程序中向后导航。

我能解决这个问题的唯一方法就是重新设计应用程序。如果您依赖history.go(-1),则需要制作一个模仿ready()的新功能。