我们正在现有的Web应用程序上实现辅助功能。我们使用Firefox和NVDA。 关于我们的Web应用程序的一点介绍:我们的Web应用程序是具有多个步骤的表单(步骤1,步骤2:那些是不同的Web页面)。每个步骤都有一个上一个/下一个超链接,可以转到上一个或下一个步骤。在最后一步,用户可以看到他们的输入,并可以提交表单或返回更改值。当用户转到上一页以更改某些值时,我们放置一个#anchor,以便页面转到该锚点。然后,在Jquery中,我将焦点放在该锚之后的第一个可聚焦元素上。
除非NVDA处于活动状态,否则效果很好:
当NVDA处于活动状态时,NVDA强制关注最后一次当用户在此页面上时最后使用的HTML元素。就我而言,NVDA将重点放在Next超链接上。 NVDA覆盖了我在$(document).ready()函数中设置的焦点。
我尝试更改NVDA中的几乎所有设置但未找到解决我问题的设置。
我在网上搜索任何ARIA属性我可以设置告诉NVDA我会管理焦点和导航但是我没有找到任何东西。
任何人都知道如何解决此问题?
非常感谢!
答案 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()
的新功能。