我记得曾经在规范中读过id
属性和name
属性共享相同的命名空间并且必须是唯一的。从此以后,我一直试图在我的应用程序中满足这个要求,甚至害怕将相同的id
和name
放在同一个元素上。
但是最近我开始使用ASP.NET MVC 3,它(像PHP一样)可以在几个输入控件上使用相同的name
属性,以在服务器端形成值集合。我试图查找规范中的相关部分 - 但未能找到它。也许我误解了一些东西,或者阅读了错误的文档?
答案 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的多个表单元素。这是单选按钮如何工作的标准,因此您可以强制选择一个单选按钮组。