占位符未与 Aria 一起显示

Placeholder not showing with Aria

我有一个占位符,您可以在其中搜索多个名称。我做到了,所以屏幕 reader NVDA 会显示您每次按下切换时列表中的人数(例如,如果您按 a,它表示有 20 个结果,如果您按 ag,则有12 等.)

问题是,当您删除所有字母后,屏幕 reader 会读取搜索器中的所有人员总数,我不想要那个,我想要它不说什么。 这是我的代码(重要的是这个)

<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>

没有足够的代码来真正了解问题所在,但我可以指出一些需要修复的问题,这些问题 不会 导致您的问题,但一般可访问性最佳实践。

  • 您在 <div> 上的 alt 无效 html。如果你 运行 它通过 html 验证器,例如 https://validator.w3.org/nu/ 你会得到关于 alt.
  • 的错误
  • 除非您想让屏幕 reader 说的公告非常关键,否则请避免使用 aria-live="assertive"。请改用 aria-live="polite"
  • 您的 <span> 上似乎有 aria-label,但 <span> 上没有 rolearia-label 在非语义元素上通常被忽略。请参阅 https://www.w3.org/TR/using-aria/#label-support
  • 上的倒数第三个要点
  • 您似乎正在根据搜索结果更新 <span> 上的 aria-label,而没有利用容器上的 aria-livearia-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>

并且屏幕 reader 会显示 “显示 20 个结果”。当您删除所有字符时,您将不会在跨度中放置任何内容(或空白)。

<div aria-live="polite" aria-atomic="true">
  <span> </span>
</div>

并且屏幕reader应该保持沉默(因为没有新文本可读,或者更确切地说,新文本只是空白)。