2013-08-30 91 views
3

通常我用标签标记的指示输入标签这样我可以使用标签作为标签吗?

<label for='firstname'>First Name:</label> 
<input type='text' id='firstname' /> 

现在我有这个

<label for='firstname'>First Name:</label> 
<label id='firstname'></label> 

由于我没有穿过这样的事之前,是有可能有label标记为一个label。它会工作,当我申请Javascript,因为我必须更新值?或者这是一个有效的W3C合规性?

我很困惑是否使用它。

+0

你用http://validator.w3.org/测试了吗? – series0ne

+1

也许这就是你困惑的原因。你似乎从根本上误解了'label'元素的用途。 – BoltClock

+0

你为什么想要? – j08691

回答

4

编号标签元素标签(主要)表格控件(<input>,<button>等),而不是任意元素。

the HTML specification

一些元素,并不是所有的形式相关,被归类为贴标签的元素。这些元素可以与标签元素相关联。

buttoninput(如果该类型属性不是处于隐藏状态),keygenmeteroutputprogressselecttextarea

+0

我想要这样''名字:praveen'我可以拥有它吗?label:label(id ='firstname')'。这样我可以更新在JS中使用id的值? – Praveen

+1

您可以改用span元素。就“用JS更新”而言,标签没什么特别的。 – Quentin

+0

谢谢你,我用'span'去。 – Praveen

6

它根据W3C验证是无效。

标签元素的for属性必须引用表单控件。

+0

谢谢。但是,我可以在没有'for'属性的情况下使用它。像这样'名字:praveen'我能像'label:label(id ='firstname')'那样拥有它。这样我可以更新在JS中使用id的值?这仍然无效吗? – Praveen

+0

如果使用时没有'for'属性,如'

2

正如其他人回答,该label元素必须是指控制,如input,所以它不能引用另一label元素,甚至语法。即使在HTML5中也存在此限制。

这意味着如果您使用控件以外的元素读取用户输入,仍然可以为它们使用标签,但不得使用标签的label标记。通常,最好使用input type=text来读取名称等文本数据。如果出于某种原因无法使用它或其他控件,则ARIA规范中推荐的方法是使用语义上中性的元素,通常为span,并使用ARIA属性aria-labelledby来指定标签和span之间的连接。例如:

<span id=firstnameLabel>First Name:</span> 
<span role=textbox id=firstname aria-labelledby=firstnameLabel></span> 

的ARIA属性主要是为了辅助或以其他方式可访问感知软件。主流浏览器可能会忽略它们。

+0

+1很好的解释。感谢您提供'span'和'aria'属性。 – Praveen

+0

我的答案的第一个版本在代码示例中有'aria-describedby';现在固定到'aria-labelledby'(如文中所述)。 'aria-labelledby'对应于控件和它的'label'之间的关系,这是必不可少的。 'aria-describedby'属性可以*用来指代更详细的解释。 –

相关问题