【问题标题】:Is having two labels for the same form control invalid or inaccessible HTML?同一个表单控件有两个标签是否无效或无法访问 HTML?
【发布时间】:2013-12-05 07:11:49
【问题描述】:

我正在使用插件进行客户端表单验证。问题是插件添加了一个包含表单信息的标签,所以无效的表单控件现在有两个标签。我已经修改了插件,以便标签根据有效性切换;但是,我关心的是可访问性和有效的 HTML(虽然不太关心 HTML 的验证)。

那么,这样可以吗?

<label aria-hidden=true style="display:none" for="inputElement">My Input Element</label>
<label for="inputElement">My Input Element must be at least 10 characters</label>
<input id="inputElement">

我在规范中看到每个标签只能指向一个输入元素,但没有说明一个输入元素是否只能有一个标签。

谢谢。

【问题讨论】:

标签: html forms accessibility


【解决方案1】:

单个输入不能有多个标签。使用屏幕阅读器的人会感到困惑。话虽如此,屏幕阅读器将不会看到带有display:none; 的任何内容。如果您只是根据输入是否有效进行切换,请改用div。

this question 的答案解释说这在技术上是正确的,但第二个答案解释了为什么你应该不这样做。

【讨论】:

  • 谢谢。在该问题的更下方,有一个指向规范的链接,指出[它是合法的](w3.org/TR/html401/interact/forms.html#h-17.9.1),所以我知道这一点感觉更好。关于第二个答案中的可访问性问题,我不关心提出的问题(特别是因为答案还指出只读取了第一个标签)。我已经决定在有效标签之前注入错误标签,并且错误标签包括字段名称(例如,名字是必需的)。感谢您为我指明正确的方向。
  • 查看 aria-invalid 和 role="alert"。有一个很好的例子here 用于可访问的表单验证。否则,如果屏幕阅读器用户在文本框中输入信息,并且警报在其上方,他们可能永远不会“看到”该消息。
  • 克里斯,你能概括一下你认为它是合法的地方吗?明确地说,您必须使用 for/id,并且所有有效的 HTML 都允许每页使用一次相同的 id。隐式:“要将标签与另一个控件隐式关联,控件元素必须在 LABEL 元素的内容内。在这种情况下,LABEL 可能只包含一个控件元素。标签本身可能位于关联控件之前或之后。”
  • 在html4 规范上写着More than one LABEL may be associated with the same control by creating multiple references via the for attribute. html5 规范只是声明If the attribute is specified, the attribute's value must be the ID of a labelable element in the same Document as the label element,没有一对一的关系要求。话虽如此,多个label 元素可能会让屏幕阅读器用户非常感到困惑。
猜你喜欢
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 2012-10-09
  • 2016-12-05
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
相关资源
最近更新 更多