如何使用WAI-ARIA通知屏幕阅读器现在可以看到div

fin*_*son 19 html javascript accessibility screen-readers wai-aria

如何使用WAI-ARIA通知屏幕阅读器现在可以看到div?

如果我们得到了HTML

<div id="foo">Present main content</div>
<div id="bar" style="display: none;">Hidden content</div>
Run Code Online (Sandbox Code Playgroud)

然后我们

$('#foo').hide();
$('#bar').show();
Run Code Online (Sandbox Code Playgroud)

我们如何通知屏幕阅读器他们应该通知用户现在可见的div(或者可能自动关注现在可见的div)?

Ste*_*ner 34

您通常不需要告诉屏幕阅读器现在可以看到内容.使用aria-hidden在实践中没有区别,所以我建议不要使用它.如果您希望屏幕阅读器宣布隐藏div的文本内容,您可以使用role=alertaria-live=polite(例如).您可以将此用于您希望屏幕阅读器听到的更新内容,而无需移动到内容位置来发现它.例如,弹出消息不接收焦点,但包含在诸如按下按钮之类的动作之后与用户相关的文本信息.

更新:我与开发ARIA 1.0的人讨论过,他建议使用HTML5hidden而不是aria-hidden隐藏内容的语义指示.与display:none旧版浏览器的CSS结合使用.支持HTML5的浏览器在用户代理样式表中hidden实现它display:none.

  • 您可以动态添加或已将其保存在隐藏内容上,从display:none更改为显示:阻止或使用role = alert向元素添加内容将导致触发事件事件并且内容将被公布.一个例子:[link] http://dl.dropbox.com/u/377471/tests/ajax.html (3认同)
  • Steve 提供的 Dropbox 示例链接似乎不适用于 OSX Mountain Lion 中的 Voice Over。新内容不会自动读出。 (2认同)

小智 9

使用role ="alert"标记内容将导致它触发一个警报事件,屏幕阅读器将在其可见时响应:

<div id="content" role="alert">
...
</div>

$("#content").show();
Run Code Online (Sandbox Code Playgroud)

当#content变得可见时,这将提醒用户.

当您想要从屏幕阅读器中隐藏某些内容时,应使用aria-hidden,但应向有视力的用户显示.但要小心使用.有关更多信息,请参阅此处:http: //www.456bereastreet.com/archive/201205/hiding_visible_content_from_screen_readers_with_aria-hidden/


fca*_*ran 8

使用咏叹调隐藏

表示作者实现的元素及其所有后代对于任何用户都不可见或不可感知.见相关的咏叹调.

如果元素仅在某些用户操作后可见,则作者必须将aria-hidden属性设置为true.当元素出现时,作者必须将aria-hidden属性设置为false或删除属性,指示元素是可见的.一些辅助技术直接通过DOM访问WAI-ARIA信息,而不是通过浏览器支持的平台可访问性.无论用于隐藏它的机制如何,作者必须在未显示的内容上设置aria-hidden ="true".这允许辅助技术或用户代理正确地跳过文档中的隐藏元素.

所以你的代码可能会成为

$('#foo').hide().attr('aria-hidden', 'true');
$('#bar').show().attr('aria-hidden', 'false');
Run Code Online (Sandbox Code Playgroud)