9

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

这很好用,除非 NVDA 处于活动状态:

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

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

我已经在网上搜索任何我可以设置的 ARIA 属性来告诉 NVDA 我将管理焦点和导航,但我在那里没有找到任何东西。

有谁知道如何解决这个问题?

非常感谢!

4

3 回答 3

2

我知道这已经几个月了,但我刚刚遇到了同样的问题,经过一夜的头撞桌子后,我在 NVDA 错误跟踪器上询问,结果发现这种奇怪的行为实际上是由设计(!)

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

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

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

于 2014-08-13T13:23:03.697 回答
1

正如 digitaltoast 所报告的,该行为是设计使然,请参阅在提交表单时缓存的焦点 #5351

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

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

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

我还注意到,如果表单位于 IFRAME 中,则问题不存在

于 2020-01-20T20:30:35.233 回答
0

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

这听起来像如果一个人点击上一个,你正在做

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

我认为这可能是与浏览器相关的问题。有些人在你离开页面后记得你在哪里。由于您没有重新加载页面,因此只是返回,ready()不会再次触发。再次生火的ready()问题,已经有人问过了,这可能会有所帮助。但是根据我的假设,您可能会在确定用户是否按下 back时遇到一些问题。

我已经在网上搜索任何我可以设置的 ARIA 属性来告诉 NVDA 我将管理焦点和导航,但我在那里没有找到任何东西。

ARIA 不会在这里做任何事情。问题是您如何在应用程序中向后导航。

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

于 2014-03-21T18:17:30.923 回答