如何使用类选择器为aria-labelledby属性设置标签?

3

我正在尝试创建一个可访问的输入字段,如下所示:

<input type="text" role="textbox" aria-labelledby="helper-msg-value">
<p id="helper-msg-value">You must enter a value</p>

有没有办法使用类作为选择器来代替ID作为aria-labelledby 属性? 就像这样:

<input type="text" role="textbox" aria-labelledby=".helper-msg-value">
<p class="helper-msg-value">You must enter a value</p>

我认为实现的方式是使用JavaScript自动更新由aria-labelledby引用的元素的文本/属性。 - Ronnie Royston
2个回答

9
使用 aria-labelledby 或 aria-describedby 时无法使用 class。虽然使用 aria-labelledby 可以将多个标签附加到元素上,但它仅适用于 ID 值。这是因为期望这些标签在此目的下是唯一的。一种可能的解决方案是将“aria-label”附加到带有您想要实际阅读的文本的输入上。例如,具有 将允许屏幕阅读器读出与显示标签不同的文本。只需注意,如果在输入上使用了 aria-label,则许多(大部分?)屏幕阅读器将不会读取

屏幕阅读器将无法读取该元素。您的意思是在这种情况下屏幕阅读器不会读取标签文本吗? - Fiona - myaccessible.website
1
Fiona - 仅谈论NVDA和Firefox以及我在评论中提供的代码,如果用户聚焦于输入,只有“数量”会被读出。 'QTY'仅在文档流中读取,但在输入获得焦点时不会被读出。对于任何困惑,我感到抱歉。 - Skerrvy

3
为什么不使用普通标签并正常附加它。这样可以在所有浏览器和屏幕阅读器中使用...
<div class="field">
   <label for="qty" class="required"><abbr title="Quantity">Qty</abbr></label>
   <input type="text" name="qty" aria-required="true" id="qty" class="required">
</div>

因此,我们正确匹配了标签和输入,这样就不会失败于自动检查器。它会在上下文中读取标签,告诉用户该字段是什么,以便他们知道应该输入什么内容(在您的情况下,您没有告诉用户他们正在输入什么)。 我们使用aria-required来向用户发出“必填”提示。这是标准行为,无需添加额外的文本和标签。 可以根据所需类别样式化所需的星号或其他内容。

因为如果我们有这样的内容: <label>Qty</label> 我们不希望屏幕阅读器读取"Q - T - Y",我们希望它读取"数量"。 - Ralph David Abernathy
1
你可以使用带有标题的缩写标签,例如http://stackoverflow.com/questions/29465033/pronounce-doit-as-do-it-for-screen-readers-and-the-visually-impaired,但不确定是否需要测试屏幕阅读器支持。<label title="数量"><abbr>Qty</abbr></label>或者如果表单空间足够,只需将其更改为“数量”。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接