我正在实现一个搜索框。其中一种情况是必须公布结果的总数。为了实现这一点,我将<p>
标签放在aria-live
区域内,它会按预期宣布它。
预期场景:
用户键入一个字符串-->点击回车-->结果出现,并宣布字符串
边缘情况是如果用户点击enter两次。
如果用户在没有任何更改的情况下再次按下回车键,则不会更新任何内容,因为计数仍然相同,也不会宣布任何内容。
我试着在输入点击时使用这个:
if (document.getElementById("header")) {
const currentText: string = document.getElementById("header").innerHTML;
document.getElementById("search-header").innerHTML = "";
document.getElementById("search-header").innerHTML = currentText;
}
但是,它仍然没有宣布。
有其他方法可以做到这一点吗?
我最近遇到了类似的情况。您已经实现了解决方案的一半(将innerHTML
重置为空字符串,然后将其设置为currentText
(。解决方案的另一半是将aria-relevant
属性设置为all
。
默认情况下,aria-relevant
属性设置为additions text
,但这会忽略removed
选项。由于您需要屏幕阅读器来获取对空字符串的更改(删除文本时(,因此需要将属性设置为all
(与additions text removed
相同(。
作为一种最佳实践,aria-relevant
属性通常应该保持不变,但我还没有找到其他方法让屏幕阅读器发出两次相同的通知。
在您的情况下,我还会将aria-live
属性直接添加到具有id="search-header"
的元素中。它应该看起来像这样:
<h6 id="search-header" aria-live="polite" role="status" aria-relevant="all">
X items found
</h6>
您可以在此处阅读有关aria-relevant
属性的更多信息。
这里还有更多关于aria-live
区域的信息。
我也遇到了同样的问题。我修改了添加句点的字符串,最后,如果相同的字符串再次添加到aira livediv中。
我将新的文本值与标记中现有的文本值进行了比较,如果值相同,则在传入字符串中添加句点(.(。
if (msg == $(".aria-live-div").text()){
msg = msg + "."
}