aria-errormessage和aria-alert之间的区别?

时间:2018-07-27 08:58:20

标签: html attributes accessibility uiaccessibility

我是辅助功能类型的新手。关于何时使用咏叹调错误消息以及何时使用咏叹调警报存在困惑。

我需要在咏叹调生活区域中显示其中之一。我应该使用哪个?为什么?

1 个答案:

答案 0 :(得分:2)

这不是一个非此即彼的情况。 aria-errormessage是ARIA 1.1中的新功能。 aria-errormessage的值是包含错误文本的另一个对象的ID(类似于aria-labelledbyaria-describedby)。这是一种通过关联的错误“连接”对象的方法。这就是全部。

aria-live在您要宣布更改时使用,当然可以在错误情况下使用,但是在您更改页面上的文本并希望宣布更改时也使用

role="alert",例如,如果您有计时器或股票行情自动收录器或状态指示器(例如wifi连接断开)。

aria-live="assertive"是用于设置"aria-atomic="true"aria-live="polite"的“快捷方式”。这将导致宣布“警报”一词,然后读取您的文本更改。错误消息不一定必须是警报。如果我的输入字段要求某种格式,但我犯了一个错误,则应该宣布一个错误,但并不是很重要,它必须是一个警报。可能是简单的import java.util.concurrent.{LinkedBlockingQueue, ThreadPoolExecutor, TimeUnit} import org.apache.commons.lang3.concurrent.BasicThreadFactory.Builder import org.mongodb.scala.bson.collection.immutable.Document import org.mongodb.scala.{MongoClient, Observable} import scala.concurrent.duration._ import scala.concurrent.{Await, ExecutionContext} object Test extends App { val client = MongoClient("mongodb://localhost") def insertObs = { client.getDatabase("test").getCollection("test").insertOne(Document("test" -> 1)) } val threadPool = new ThreadPoolExecutor(2, 2, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue[Runnable], new Builder().namingPattern("Custom pool").build()) val executionContext = ExecutionContext fromExecutor (threadPool) val obs = Observable(List(1, 2, 3)) val res = obs.observeOn(executionContext).map { i => println("OBS " + Thread.currentThread().getName) i }.flatMap(_ => insertObs.map { i => println("INSERT " + Thread.currentThread().getName) i }) Await.result(res.toFuture(), Duration(20, TimeUnit.SECONDS)) }

请记住,如果您使用警报(意味着断言的aria-live)并且您具有多个警报角色,则某些警报可以清除其他警报的队列,而您只会听到其中的一个。

https://www.w3.org/TR/wai-aria-1.1/#aria-live

  

用户代理或辅助技术 MAY 选择清除排队   发生主观更改时更改。 (例如,   自信区域可能会删除所有当前排队的更改)