您可以强制屏幕阅读器将数字读取为单个数字吗?

Posted

技术标签:

【中文标题】您可以强制屏幕阅读器将数字读取为单个数字吗?【英文标题】:Can you force a screen reader to read numbers as individual digits? 【发布时间】:2016-03-09 11:59:45 【问题描述】:

电话号码通常都是数字,忽略括号、破折号、加号等,因此电话号码的输入字段通常是数字。

当屏幕阅读器遇到数字输入字段时,它会将值作为整数读取。例如,如果我有三个用于美国电话号码的输入字段,第一个是区号(3 位),然后是交换机(3 位),然后是线路(4 位),如果字段有 123、456 , 7890(分别),我们通常说这个数字的方式是“一二三”、“四五六”、“七、八、九、零”。

但当屏幕阅读器遇到这些字段时,它会显示“一百二十三”、“四百五十六”、“七千八百九十”。

我认为屏幕阅读器用户习惯于将电话号码听成大数字(至少我谈过的人是这样期望的),但这并不意味着我们不能让它变得更好。如果我向其中一个人询问他们的电话号码,他们不会使用大数字,而是使用单个数字。

我尝试了各种 类型并查看了所有角色、状态和属性,但没有看到任何可以强制读取数字的内置内容。

我能想到的就是围绕它进行编码,方法是使用一个视觉隐藏的 ,其中包含作为单独数字的数字 1 2 3,然后使用

有没有更好的办法?

【问题讨论】:

为什么需要这样做?屏幕阅读器具有允许用户根据需要按字符进行检查的功能。 Telephone numbers and screen readers的可能重复 【参考方案1】:

浏览器支持有限,可以试试 CSS3 属性:

speak:spell-out;

最好的方法是使用 aria-label 提供一个方便的阅读格式,并有足够的停顿:

<span aria-label="1 2 3. 4 5 6. 7 8 9 0">123 456 7890</span>

您也可以使用hCard microformat,它可以被某些技术解释,并使用国际格式的电话号码(其他人可以使用)结合以前的方法

<p class="h-card">
  <span class="p-tel" aria-label="1 2 3. 4 5 6. 7 8 9 0">+123 456 7890</span>
</p>

TL;DR:使用国际格式、aria-label、hCard 微格式和speak:spell-out CSS 属性

【讨论】:

根据2020年的这篇文章,speakspeak-as在任何浏览器中都不支持。太糟糕了,这将是有用的。 css-tricks.com/almanac/properties/s/speak【参考方案2】:

我认为您的基本职责是以正常方式显示您所在地区的电话号码(即显示美国电话号码与英国号码不同。)

与其他网站的做法保持一致(即使不是最理想的)将为屏幕阅读器用户带来最少的工作量。这有点像那些自动将您转到下一个字段的输入。好主意,但人们已经习惯了次优方法,所以无论如何都要按 Tab。

您不想妨碍复制粘贴或其他基本操作,但作为增强功能,您可以使用 aria-label ,如以下答案:ARIA attributes for reading alternative text (e.g. Roman Numerals) in html

例如 &lt;span aria-label="One, Two, Three"&gt;&lt;span aria-hidden="true"&gt;123&lt;/span&gt;&lt;/span&gt;

但是,这很麻烦而且很烦人,我认为屏幕阅读器应该做得更好。

【讨论】:

以上是关于您可以强制屏幕阅读器将数字读取为单个数字吗?的主要内容,如果未能解决你的问题,请参考以下文章

lua可以对单个字符和数字之间进行转换吗

通过 dplyr 聚合 - 将单个列从因子变为数字

Obreon:屏幕阅读器不读取下拉项目

我们可以将负面二进制解释为正面吗(请阅读问题)?

有没有办法强制将单个数字Int转换为两位数的int值?

屏幕阅读器如何从 HTML 中读取元素