【问题标题】:How to properly show an error message inside a fieldset如何在字段集中正确显示错误消息
【发布时间】:2019-02-19 15:03:55
【问题描述】:

我想要一个fieldset-tag 来显示错误消息。

当做类似的事情时:

<fieldset>
  <legend>Some Legend</legend>
  <div role="alert" aria-live="assertive" aria-relevant="all">
    My Error Message
  </div>

  ...
  <!-- formfields -->
</fieldset>

屏幕阅读器没有读取错误消息,但是当将错误消息包装在 &lt;label&gt;-tag 中时,它正在读取它,但感觉不对。

就可访问性而言,在fieldset-tag 中显示错误消息的正确方法是什么?

【问题讨论】:

    标签: html accessibility markup semantic-markup


    【解决方案1】:

    如果您遵循一些简单的规则,aria-live 区域会很好地工作。

    • 带有aria-live 的元素在页面加载时必须存在。也就是说,您不能在页面加载后动态添加该属性。
    • 如果使用默认的aria-relevant 值(即,如果您未指定aria-relevant),则只有在更改区域中的文本或添加子DOM 节点时才会宣布更改。在您的情况下,您拥有“全部”,因此也将宣布被删除的子 DOM 节点。请注意,隐藏或取消隐藏元素不会被视为 DOM 中的更改,因此不会被宣布。

    一些旁注:

    • 一般来说,aria-live="polite" 足以满足大多数情况。 aria-live="assertive" 很少需要,除非是非常紧急的消息。
    • 使用role="alert" 会给你一个隐含的aria-live="assertive"。您不必指定aria-live

    【讨论】:

    • 很棒的信息。更明确地说,role=alert 标记内的文本不会在页面加载时读取,只有在更新后才会读取。
    • 没错,我并没有说它会在页面加载时被读取。我说属性/角色必须由页面加载时间设置,因为某些浏览器/AT 组合不允许在页面加载后设置它们。我还假设 aria-live 的一般概念已被理解 - 元素在更改之前不会被读取。
    • 我很好奇单页应用 (SPA) 的解决方案是什么,它会在加载时生成动态 html
    • @grazerbeam 需要更多详细信息。您是在谈论在 SPA 中宣布新内容还是在谈论 SPA 中的错误消息?后者工作正常。添加具有 aria-live 的新内容,当在 live 区域内产生错误时,将被宣布。
    • 一个 SPA html 文件可能只是一个 div,然后在页面完成加载资产时构建所有 html。在这种情况下,任何带有 aria-live 的新 Dom 元素都不会遵循上述第一条加载时间存在的规则。
    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2013-11-15
    • 2013-02-26
    • 1970-01-01
    • 2015-07-03
    相关资源
    最近更新 更多