名称属性是否必须在HTML文档中是唯一的?

时间:2011-04-01 20:26:44

标签: html unique

我记得曾经在规范中读过id属性和name属性共享相同的命名空间并且必须是唯一的。从此以后,我一直试图在我的应用程序中满足这个要求,甚至害怕将相同的idname放在同一个元素上。

但是最近我开始使用ASP.NET MVC 3,它(像PHP一样)可以在几个输入控件上使用相同的name属性,以在服务器端形成值集合。我试图查找规范中的相关部分 - 但未能找到它。也许我误解了一些东西,或者阅读了错误的文档?

那是怎么回事?我想生成尽可能有效的HTML(在不同的应用程序中都是4.01和5)。我可以毫无畏惧地使用这个技巧吗或者我会违反某些内容并且应该更好地坚持独特的价值观?

3 个答案:

答案 0 :(得分:47)

name属性仅对<form>和表单元素(<input><textarea><select>)有效。它用于指定与表单帖子上提交的名称/值对关联的name

例如:

<input type="checkbox" name="foo" value="1" />

如果选中则会提交foo=1。在DOM中,您可以通过将form.elements指定为索引来引用name集合中的表单元素。如果name不唯一,则集合返回元素数组而不是元素。现代DOM支持按名称查找表单元素:

 document.getElementsByName(nameValue)

注意:即使只找到一个元素,它也会返回一个数组。

id属性来自XML世界,并且是任何节点的唯一ID,而不仅仅是表单元素。与name属性不同,它在任何HTML节点上都有效。与name属性一样,它必须遵循有效的标识符规则。标识符应该以alpha开头,并且只包含alpha([a-zA-Z]),数字,连字符,下划线和冒号(注意ASP.NET通过使用下划线启动保留ID来破坏此规则 - 因此它们将始终使HTML失败/ XML lint - 实际上有些代理剥离它们。要按id查找任何HTML元素,请使用:

document.getElementById(idvalue)

这只返回一个DOM节点。

答案 1 :(得分:17)

name属性不是唯一的。例如,它用于分组单选按钮。它表示特定表单属性的值。 id必须是唯一的。

答案 2 :(得分:7)

ID应该是唯一的,但您可以使用具有相同NAME的多个表单元素。这是单选按钮如何工作的标准,因此您可以强制选择一个单选按钮组。