![](/img/trans.png)
[英]Set aria-live to read updates before reading out the DOM element in focus
[英]Aria-live region is not reading out updates when an element is removed on chrome
当您将元素动态添加到 aria-live 区域时,Chrome 会读出该区域中的所有项目,这很棒。
但是当您删除一个元素时,Chrome 不会重新读出该列表。 当您将区域用于错误时,这是一个问题,例如当用户修复错误时,列表不会重新读出。
此处示例: https://codepen.io/mildrenben/pen/WNNzVzN?editors=1010
<div aria-live='assertive'>
</div>
<button id='add'>add</button>
<button id='remove'>remove</button>
const addBtn = document.querySelector('#add')
const removeBtn = document.querySelector('#remove')
const ariaLive = document.querySelector('div')
let tick = 0
addBtn.addEventListener('click', () => {
let newElem = document.createElement('span')
newElem.textContent = tick
tick++
console.log(ariaLive, newElem)
ariaLive.appendChild(newElem)
})
removeBtn.addEventListener('click', () => {
ariaLive.removeChild(ariaLive.lastChild)
})
正确的方法应该是使用aria-relevant
属性,但是浏览器支持很差,不可靠。
我通常不提倡做一些骇人听闻的事情来让浏览器以某种方式运行,但如果你真的需要让实时区域报告删除,我会建议以下内容:
aria-atomic
属性设置为true
。 这意味着屏幕阅读器将在每次添加(但不删除)内容时读取活动区域的全部内容。此处的小提琴示例: https://jsfiddle.net/mug6vonf/3/
您还应该使用aria-relevant :
价值观:
以下一个或多个值的空格分隔列表:
additions
是将节点插入活动区域; 应该被认为是相关的。removals
是删除节点; 应该被认为是相关的。text
是对现有节点的文本内容的更改; 应该被认为是相关的。all
相当于添加删除文本。
aria-relevant="additions text"
是活动区域的默认值。
默认值不包括您可能需要的removals
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.