我有表格。提交表单后,表单将与display:none一起隐藏,并在其位置显示一条确认消息(该消息将样式从display:none更改为display:block)。没有AJAX调用,也没有重新加载页面。确认只是更改了display属性。
JAWS不读取确认的文本,即使我将aria-live="assertive"放在它的容器上。我把注意力放在确认消息容器上,让JAWS阅读它。但是问题是,当我重新加载页面时,JAWS会再次读取确认消息,即使在页面加载时它有display:none和aria-hidden="true"。
我尝试了我在堆栈溢出中找到的所有东西:我测试了aria-busy、speak:none,这两种类型的aria-live,用aria-hidden隐藏消息,没有任何效果。JAWS仍然读取刷新页面的确认消息。
由于项目的性质,我无法粘贴代码,但我希望我对问题的描述是可以理解的。
更新:
基于@Josh建议,我更新了代码--现在我使用JavaScript将错误/确认div插入到活动区域。但问题仍然存在。
下面是代码结构:

我将confirmation-status-publish或error-status-publish与所有的aria附加到上面相应的包装器中。
发布于 2019-11-21 14:55:40
在无法看到代码发生了什么情况的情况下,我怀疑您可能没有正确地使用aria live区域。
要使活动区域工作,它必须以具有aria-live或等效role属性的元素的形式出现在页面加载中。无法通过脚本在页面加载后添加活动区域,因为它无法工作。
当页面加载时,在aria元素中的任何内容都将被视为页面的一部分,而不是以任何特殊的方式公布。
只有当通过动态地将内容添加到活动区域时,来自活动区域的公告才是。aria-live="polite/assertive"和aria-atomic="true/false"属性将控制其工作方式的行为。
所以,要想让这件事奏效,你需要做一些如下的事情:
在页面上加载:
<div aria-live="assertive" aria-atomic="true">
<form>
... some code
</form>
<div>提交表格后:
<div aria-live="assertive" aria-atomic="true">
<div id="confirmation">
... some other code
</div>
<div>我鼓励您查看一下Terrill Thompson Aria现场测试页面上的源代码,并使用JAWS/IE运行一些测试,以了解它应该如何工作。
https://stackoverflow.com/questions/58976045
复制相似问题