html - 占位符未与 Aria 一起显示
问题描述
我有一个占位符,您可以在其中搜索多个名称。我这样做是为了让屏幕阅读器 NVDA 显示您按下的每个切换按钮的列表中的人数(例如,如果您按 a,则显示有 20 个结果,如果按 ag,则显示有 12 个结果,等等。 .)
问题是,当您完成删除所有字母时,屏幕阅读器会读取搜索器中所有人员的总数,而我不希望这样,我希望它什么也不说。这是我的代码(重要的部分是这个)
<div class="sr-only" alt="This div read on screen reader the results of searched persons and its not visible" aria-atomic="true" aria-live="assertive">
<span class="sr-only" v-bind:aria-label=" 'Showing '+filterPeople.length + ' results.'"></span>
</div>
还有这个
<div class="nav-new-scrollbar"></div>
<div v-show="addMore == 2 && myPeople.length < 5 && !plannerOpened" class="wc-search">
<img src="imagesnew/search-icon-peopleSearch.svg" title="Search" alt="Search" tabindex="0" class="wc-searchbox-btn" />
<input v-model="search" type="text" placeholder="Search to add a person" tabindex="0" class="keyboard-outline" aria-label="Search to add a peopleF" />
<div v-show="search != ''" class="wc-select-city">
<div v-for="(person, index) in filterPeople" :key="person.Id + '-' + index" class="wc-result-people" tabindex="0" :value="city.Id" @click.stop.prevent="addCity(person.Id)" @keyup.enter.stop.prevent="addPerson(person.Id)">
<p :title="person.PersonName">
{{ city.PersonName }}
</p>
</div>
</div>
</div>
解决方案
没有足够的代码来真正了解问题所在,但我可以指出一些需要修复的东西,它们不会导致您的问题,而是一般的可访问性最佳实践。
- 您有一个
alt
无效的<div>
html。如果您通过 html 验证器(例如https://validator.w3.org/nu/ )运行它,您将收到有关alt
. - 除非您希望屏幕阅读器说出的公告非常重要,否则请避免使用
aria-live="assertive"
. 改为使用aria-live="polite"
。 - 看起来您有一个
aria-label
on a<span>
但您role
的<span>
.aria-label
在非语义元素上通常被忽略。请参阅https://www.w3.org/TR/using-aria/#label-support上的倒数第三个要点 - 看起来您正在根据搜索结果更新
aria-label
on<span>
并且没有利用aria-live
容器。 将宣布在元素内部aria-live
进行的任何文本更改。因此,如果您在 之间插入新文本,它将宣布“此处有新文本”。<span>new text here</span>
鉴于这一切,我认为如果你有类似的东西,你的代码应该可以工作:
<div aria-live="polite" aria-atomic="true">
<span> <!-- put text here --> </span>
</div>
所以当你输入'a'时,你会有
<div aria-live="polite" aria-atomic="true">
<span> Showing 20 results </span>
</div>
屏幕阅读器会说“显示 20 个结果”。当您删除所有字符时,您不会在跨度中放置任何内容(或空白)。
<div aria-live="polite" aria-atomic="true">
<span> </span>
</div>
并且屏幕阅读器应该是静音的(因为没有要阅读的新文本,或者更确切地说,新文本只是空白)。
推荐阅读
- .net - 如何在 WPF 中删除 LineGraph 周围的边框?
- android - 如何在 Koin Android 上使用存根覆盖 UnitTests 中 ViewModel 中注入的 Bean
- qt - QML 项目,Repeater 子项,通过 id 获取子项
- python-3.x - PyFPDF在指定大小时无法添加页面
- javascript - Ag 网格:在运行时自动调整列在 chrome/IE 11 中不起作用
- c++ - 在这个程序中,读取了一个文件,其中包含很多学生。在每一行中都有姓氏
- html - 我无法以角度运行 ngxPrint
- python - Plotly 中子图的相同 x 轴范围
- openstack-horizon - 在控制器节点上配置仪表板时 httpd 服务停止工作
- javascript - 这是一个纯函数吗?