如何防止NVDA自动将焦点设置在上次使用的HTML元素上?

问题描述 投票:3回答:3

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

这很有效,除了NVDA处于活动状态时:

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

我已经尝试更改NVDA中的几乎所有设置,但没有找到可以解决我的问题的设置。

我已经在网络上搜索了我可以设置为告诉NVDA的任何ARIA属性,我将管理焦点和导航,但在那里我什么都没找到。

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

非常感谢!

firefox focus accessibility autofocus nvda
3个回答
2
投票

我知道这已经几个月了,但是我遇到了同样的问题,经过一整夜的脑袋撞桌子,我问了NVDA bug跟踪器,结果发现这种奇怪的行为是实际上是设计(!)

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

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

需要jQuery或其他检测已加载窗口的方法。并且显然也需要一个ID为“ toplink”的元素,或者更改代码中的ID。让我知道这是否适合您:)


0
投票

就我而言,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)的新功能。


0
投票

正如digitaltoast报道的那样,行为是设计使然,请参阅ready()

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

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

GET表单似乎在提交相同的数据(URL相同)之前不受影响(URL更改),然后出现问题。

[我也注意到,如果表格位于IFRAME中,则不存在此问题

© www.soinside.com 2019 - 2024. All rights reserved.