我们正在现有的Web应用程序上实现可访问性。我们使用Firefox和NVDA。Web应用程序的简介:我们的Web应用程序是具有多个步骤的表单(步骤1,步骤2:这些是不同的网页)。每个步骤都有上一个/下一个超链接,可转到上一个或下一个步骤。在最后一步,用户可以看到他们的输入,可以提交表单或返回更改值。当用户转到上一页更改某些值时,我们放置#anchor,以便页面转到该锚点。然后,在Jquery中,我将焦点放在该锚点之后的第一个可聚焦元素上。
这很有效,除了NVDA处于活动状态时:
当NVDA处于活动状态时,NVDA将焦点集中在用户上次在此页面上使用时最后使用的HTML元素。就我而言,NVDA将重点放在下一个超链接上。 NVDA会覆盖我在$(document).ready()函数中设置的焦点。
我已经尝试更改NVDA中的几乎所有设置,但没有找到可以解决我的问题的设置。
我已经在网络上搜索了我可以设置为告诉NVDA的任何ARIA属性,我将管理焦点和导航,但在那里我什么都没找到。
任何人都知道如何解决此问题吗?
非常感谢!
我知道这已经几个月了,但是我遇到了同样的问题,经过一整夜的脑袋撞桌子,我问了NVDA bug跟踪器,结果发现这种奇怪的行为是实际上是设计(!)
无论如何,无论如何,我都找到了适用于Firefox 32和NVDA 2014.2的修复程序
$(document).ready(function() {
function resetTab(){
document.getElementById('toplink').focus();
}
window.setTimeout(resetTab, 250);
});
需要jQuery或其他检测已加载窗口的方法。并且显然也需要一个ID为“ toplink”的元素,或者更改代码中的ID。让我知道这是否适合您:)
就我而言,NVDA将重点放在下一个超链接上。 NVDA会覆盖我在$(document).ready()函数中设置的焦点。
这听起来像是某人单击上一个,表示您正在做
<a href="#" onClick="history.go(-1); return false;">Go back</a>
我认为这可能是与浏览器有关的问题。有些人记得离开页面后的位置。由于您没有重新加载页面,因此只需返回,ready()
就不会再次触发。 making ready()
fire again, was already asked问题,可能会有所帮助。但是考虑到我的假设,您可能会遇到一些问题ready()
。
我已经在网络上搜索了我可以设置为告诉NVDA的任何ARIA属性,我将管理焦点和导航,但在那里我什么都没找到。
ARIA在这里什么也不做。问题是您如何在应用程序中向后导航。
我可以解决此问题的唯一方法是重新设计应用程序。如果您依赖determining if the user pressed back,则需要制作一个模仿history.go(-1)
的新功能。
正如digitaltoast报道的那样,行为是设计使然,请参阅ready()
直接,焦点没有被缓存。我们正在缓存用户在页面上的最后位置,这间接导致焦点发生变化。缓存用户的最后一个位置是必要的,以确保在页面之间来回导航,还原关闭的选项卡/窗口等使用户处于正确的位置,这是用户需要并期望的功能。不幸的是,它确实有您描述的副作用。
如果URL更改则不会出现此问题,因此可能的解决方案可能是向查询字符串添加随机参数
GET表单似乎在提交相同的数据(URL相同)之前不受影响(URL更改),然后出现问题。
[我也注意到,如果表格位于IFRAME中,则不存在此问题