名称属性在 HTML 文档中是不是必须是唯一的?
Posted
技术标签:
【中文标题】名称属性在 HTML 文档中是不是必须是唯一的?【英文标题】:Does a name attribute have to be unique in a HTML document?名称属性在 HTML 文档中是否必须是唯一的? 【发布时间】:2011-07-27 23:15:44 【问题描述】:我记得曾经在规范中读过id
属性和name
属性共享相同的命名空间并且必须是唯一的。从那以后,我一直试图在我的应用程序中满足这个要求,甚至害怕将相同的id
和name
赋予相同的元素。
但最近我开始使用 ASP.NET MVC 3,它(如 php)可以在多个输入控件上使用相同的 name
属性,以在服务器端形成一组值。我试图在规范中查找相关部分 - 但未能找到它。也许我当时误解了什么,或者阅读了错误的文档?
然后呢?我想生成尽可能有效的 html(不同应用程序中的 4.01 和 5)。我可以无所畏惧地使用这个技巧吗?还是我会违反某些东西,应该更好地坚持独特的价值观?
【问题讨论】:
【参考方案1】:name
属性仅对<form>
和表单元素(<input>
、<textarea>
和<select>
)有效。它用于指定 name
以与表单帖子上提交的名称/值对关联。
例如:
<input type="checkbox" name="foo" value="1" />
如果选中将提交foo=1
。在 DOM 中,您可以通过将 name
指定为索引来引用 form.elements
集合中的表单元素。如果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 节点。
【讨论】:
啊,I found it!似乎我错过了上下文。 :) 事实上,name
属性适用于一些其他元素,但它只是复制了id
属性,实际上 必须等于它 如果两者都被定义.幸运的是,这不适用于表单元素。 :)
应该注意<a>
也使用name属性作为锚文本。
html5中的id和name可以包含除空格以外的任意字符,但必须至少有一个字符:w3.org/TR/html5/dom.html#the-id-attribute【参考方案2】:
ID 应该是唯一的,但您可以使用具有相同名称的多个表单元素。这是单选按钮工作方式的标准,因此您可以强制选择一个单选按钮组。
【讨论】:
【参考方案3】:name
属性不是唯一的。例如,它用于对单选按钮进行分组。它表示特定表单属性的值。 id
s 必须是唯一的。
【讨论】:
以上是关于名称属性在 HTML 文档中是不是必须是唯一的?的主要内容,如果未能解决你的问题,请参考以下文章