我在role="alert"
上有一个咏叹调生活区域,其值"assertive"
未在表单提交时使用。它也是由PHP编写的,就像页面加载一样。
它可以在PC上的NVDA中正常工作,但Mac上没有任何内容。我发誓以前我已经测试了这个并经常使用这种技术。
为什么没有说出来的任何想法?
div看起来像这样:
<div class="alert alert-danger" role="alert" aria-live="assertive">Error: please fix the indicated fields:</div>
答案 0 :(得分:2)
已知在页面加载时直接读取ARIA实时区域不起作用,或者对于屏幕阅读器和浏览器的某些组合并不总是可靠。 这是事实:你无法做任何事情。
当将新的实时区域添加到DOM或更新现有实时区域的文本内容时,将读取ARIA实时区域。 这适用于几乎所有屏幕阅读器和浏览器的组合。 但是,如果必须读取或不读取页面加载时存在的实时传输,则没有明确指定;所以,这取决于屏幕阅读器和浏览器。
了解这一点,您可以在加载页面后不久执行上述两项操作之一来触发读取:
请注意,如果添加/更改现有元素的角色和/或aria-live属性,它将无法工作。元素必须是新元素或其文本必须有效地改变。
答案 1 :(得分:0)
aria-live属性实质上将dom元素标记为将接收更改的内容,并且应将这些更改传达给用户。
role =“alert”属性实现了类似的声明,但各种屏幕阅读器对其进行了不同的解释。当使用role =“alert”时,它有一个隐含的aria-live =“assertive”,所以你不需要两者。
aria-live元素应该在页面加载时位于DOM中,并且应该根据需要添加要读取的内容。屏幕阅读器不会总是连续解析页面以获取其他元素,因此不会公布。
Chrome vox将不断解析并因此捡起它,JAWS通常会接听它,画外音和对讲通常不符合我的经验。按预期工作的画外音和对讲很大程度上取决于使用正确的浏览器。
QuenticC大部分是正确的,但是当aria-live =“断言”公告存在于初始页面源中然后稍后添加内容时,它们的工作最可靠。当作为新元素注入页面时,role =“alert”(通常)效果最佳。
答案 2 :(得分:-1)
role=alert
和aria-live="assertive"
实际上是相同的(警报暗示断言),尽管这不应该导致问题本身。
也许您需要使用PHP来输出标记,然后使用JS为其添加role="alert"
属性,以便在页面完成加载后触发它。