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

Vil*_*lx- 58 html unique

我记得曾经在规范中读过id属性和name属性共享相同的命名空间并且必须是唯一的.从此以后,我总是试图在我的应用程序中满足这个要求,即使给予相同idname相同的元素也要害怕.

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

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

Kol*_*ten 50

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

例如:

<input type="checkbox" name="foo" value="1" />
Run Code Online (Sandbox Code Playgroud)

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

 document.getElementsByName(nameValue)
Run Code Online (Sandbox Code Playgroud)

注意:即使只找到一个元素,它也总是返回一个数组.

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

document.getElementById(idvalue)
Run Code Online (Sandbox Code Playgroud)

这只返回一个DOM节点.


Ish*_*ael 17

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


Ala*_*ber 7

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