javascript - 强制屏幕阅读器在输入 Div 时读取标签

标签 javascript html wai-aria screen-readers jaws-screen-reader

我有一个包含许多动态表单元素的 div。我希望屏幕阅读器在通过选项卡输入 div 时读取标签,但 div 本身(并且应该)无法聚焦。通常在标签上使用 for 属性或在第一个表单元素上使用 aria-scribedby/aria-labeledby 属性将允许这种行为,但表单元素在加载过程中会动态变化,因此第一个元素是不确定的。

<label/> <%-- This should be read --%>

<div> <%-- When this div is entered during navigation with tabbing --%>
     <dynamic form element 1>
     ...
     <dynamic form element n>
</div>

有人知道通过 WIA-ARIA 产生这种行为的方法吗?

或者,是否有一种方法可以使用 javascript 来拉取 div 下的第一个元素并动态添加必要的 for/aria 属性?

最佳答案

如果您想让页面易于访问,那么您应该使用正确的语义元素。这样做可以使屏幕阅读器和其他辅助技术能够根据各自的目的正确呈现元素。 看来您的 div 应该是一个表单元素并使用字段集和图例,而不是使用 div 来创建表单。您应该始终避免重新发明轮子。

<form method="" action="">
    <fieldset>
        <legend>This will be read when the user tabs to this</legend>
        <dynamic form element 1>
         ...
        <dynamic form element n>
    </fieldset>
</form>

这将使您不再需要 ARIA 标签,除非您有特定信息只提供给这些用户。 使用正确的语义元素可以大大帮助辅助技术访问页面。 此链接以及许多其他链接提供了一些有关使表单可在 html 中访问的有用信息:https://www.w3.org/WAI/tutorials/forms/

关于javascript - 强制屏幕阅读器在输入 Div 时读取标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39154335/

相关文章:

php - 不同的表单,相同的对话框

HTML5 Canvas - 二维线框球体

reactjs - 使用 React 时,aria-live 元素在 NVDA 中被多次读取

angularjs - 如何在 AngularJS 中有条件地创建属性

google-maps - 什么是适合 map 元素的 WAI-ARIA 角色属性

javascript - 我可以隐藏滚动条但保持溢出吗?

javascript - HTML 输入字段宽度(与 JavaScript 相关)

jquery - 表内表折叠未正确显示

javascript - 获取 API,在 useFinalURL 上重新发布 formData

jquery - 使用 jquery 翻转面板