HTML中id和name属性之间的区别


Answers:


623

name在表单提交中发送数据时使用该属性。不同的控件反应不同。例如,您可能有几个单选按钮,它们具有不同的id属性,但属性相同name。提交后,响应中只有一个值-您选择的单选按钮。

当然,这还不止于此,但它一定会让您思考正确的方向。


您能否详细说明一下它。当提交时,响应中只有一个值-您选择的单选按钮。
NoviceToDotNet

除了单选按钮以外,还有其他用途吗?我认为除此以外应该有很大的不同?
普雷吉斯(Prageeth)Godage 2013年

27
@Prageeth:区别在于,“名称”从浏览器传输到服务器,并且可以与“ id”不同。人们可能会希望这种差异有很多原因。例如,您的服务器端语言/框架可能需要提交的值具有某些名称,但是您的JavaScript最好与id完全不同的东西一起使用。
约翰·费希尔

28
非正式地说,这id是您的前端(CSS,JS)使用的功能,同时name也是服务器接收并可以处理的内容。这基本上就是Greeso的回答。
萨拉夫

2
最好说:发送数据时需要 name属性 ...,而不是:发送数据时使用 name属性...,因为任何缺少name属性的表单数据都不会被发送(或者实际上不会被发送)根据HTML规范进行了处理)
ebyrob,

330

name属性用于表单控件(例如<input><select>),因为这是表单提交时在POSTGET调用中使用的标识符。

id每当您需要使用CSS,JavaScript或片段标识符来寻址特定的HTML元素时,请使用属性。也可以通过名称查找元素,但是通过ID 查找元素更简单,更可靠


2
这是非常清楚的。那么,我可以推断一下,“名称”几乎是发送到服务器的参数“标识符”的表示吗?已接受的答案部分回答了该问题,但未用这些术语表示。
托马斯

5
@Thomas:有之间没有必然的领带name,并id在所有。该标识符唯一地标识页面上的特定HTML元素。name相比之下,HTML表单元素的属性不必唯一,通常也不是唯一的,例如单选按钮或包含多个<form>元素的页面。传统上在同一HTML元素上使用,name并且id在同一HTML元素上使用相同的字符串,但是没有什么让您这样做。
沃伦·杨

我正在实现一个可以解释某些html标记的自定义文本区域,我使用了contentEditable div来完成此操作。如果向其添加属性“名称”,其行为是否会如此?
YEV

124

这是一个简短的摘要:

  • id用于通过文档对象模型(通过JavaScript或CSS样式)识别HTML元素id在页面内应该是唯一的。

  • name对应于form元素,并标识发布回服务器的内容


27

看到这个http://mindprod.com/jgloss/htmlforms.html#IDVSNAME

有什么不同?简短的答案是,请同时使用两者,不要担心。但是,如果您想了解这种愚蠢的做法,请参考以下内容:

id =用作这样的目标:<some-element id="XXX"></some-element>对于这样的链接:<a href="#XXX"

当您单击表单中的提交时,name =还用于标记发送到HTTP(超文本传输​​协议)GET或POST到服务器的消息中的字段。

id =标记供JavaScript和Java DOM(文档对象模型)使用的字段。name =中的名称在表单中必须唯一。id =中的名称在整个文档中必须是唯一的。

有时,name =和id =名称会有所不同,因为服务器期望同一文档中各种形式的名称相同,或者与上述示例相同的形式使用各种单选按钮。id =必须是唯一的;name =一定不能。

JavaScript需要唯一的名称,但是这里已经有太多没有唯一的name =名称的文档,因此W3人们发明了唯一的id标签。不幸的是,较旧的浏览器无法理解。因此,您需要表单中的两种命名方案。

注意:<a>HTML5不支持某些标记之类的属性“名称” 。


2
有点令人困惑...在某些方面,我认为是错误的。不是吗:因为HTTP中使用了参数,所以对于提交中的标签name很重要,并且仅仅是唯一的标识符<input><form>id
Don Cheadle

另外,该(未注册)用户链接到他自己的页面(他的个人资料上的链接为mindprod.com/jgloss)。我不知道这对SO来说不是一个问题,但是鉴于令人困惑的摘要,这感觉是不合适的。
zb226 '18

23

我考虑和使用它的方式很简单:

id用于CSS和JavaScript / jQuery(在页面中必须是唯一的)

通过HTML提交表单时,名称用于PHP中的表单处理(在表单中必须唯一-在某种程度上,请参见下面的Paul评论)


2
并非完全正确- 名称属性在表单中不必唯一,因为它可以将单选按钮链接在一起。
保罗

4
同样,这可能会让您感到惊讶,但是PHP并不是世界上唯一的服务器语言。

@seesharper-真有趣。我什至投票赞成你!好吧,是的,这并不令我惊讶:)
格里索

14

ID标签-CSS使用的ID标签,定义div,span或其他元素的唯一实例。出现在Javascript DOM模型中,使您可以通过各种函数调用来访问它们。

字段的名称标签-每个表单的名称标签都是唯一的-除非您正在做一个要传递给PHP /服务器端处理的数组。您可以通过Javascript按名称访问它,但是我认为它不会作为DOM中的节点出现,或者可能会受到一些限制(例如,如果我没记错的话,则不能使用.innerHTML)。


9
单选按钮必须共享相同的名称才能正常运行-每个表单不是唯一的。
尼克

我的错。尽管需要澄清,但对于文本输入,文本区域等,名称标签用于标识它们。不必唯一。
Extrakun

12

通常,假定name始终被id取代。从某种意义上说,这是正确的,但实际上对于表单字段和框架名称而言,并非如此。例如,对于表单元素,该name属性用于确定要发送到服务器端程序名称/值对,并且不应消除。Browsers do not use id in that manner。为了安全起见,可以在表单元素上使用name和id属性。因此,我们将编写以下内容:

<form id="myForm" name="myForm">
     <input type="text" id="userName" name="userName" />
</form>

为确保兼容性,定义两个名称和id属性值时要匹配,这是一个好主意。但是,请小心-一些标签,尤其是单选按钮,必须具有唯一的名称值,但需要唯一的id值。再一次,这应该引用id不仅仅是名称的替代;他们的目的不同。此外,不要低估旧式方法,深入了解现代库会发现这种语法风格有时用于性能和易用性。您的目标应该始终是兼容性。

现在,在大多数元素中,不建议使用name属性,而推荐使用更普遍的id属性。然而,在某些情况下,特别是形成字段(<button><input><select><textarea>),name属性生命上,因为它仍然需要设定表单提交的名称-值对。此外,我们发现某些元素(尤其是框架和链接)可能会继续使用name属性,因为它对于按名称检索这些元素通常很有用。

id和name之间有明显的区别。通常,当名称继续出现时,我们可以将值设置为相同。但是,id必须是唯一的,在某些情况下,名称应该不是唯一的-想想单选按钮。令人遗憾的是,虽然id值的唯一性虽然受到标记验证的约束,但却没有达到应有的一致性。浏览器中的CSS实现将为共享ID值的对象设置样式;因此,直到运行时,我们才可能捕获可能影响JavaScript的标记或样式错误。

摘自JavaScript- The Complete Reference by Thomas-Powell


4
另一个不习惯使ID匹配名称的习惯的原因:页面上可能有两种形式需要提交相同的数据(例如,两个搜索字段)。在这种情况下,name应当相同(服务器端代码不在乎提交的是哪个),但是id必须不同(因为它在整个页面中必须是唯一的)。
IMSoP '16

10

name对于链接目标已弃用,在HTML5中无效。它至少在最新的Firefox(v13)中不再起作用。更改<a name="hello"><a id="hello">

目标不需要是<a>标签,可以是<p id="hello">或<h2 id="hello">等,这通常是更干净的代码。

正如其他帖子明确指出的那样,name表格仍在使用(需要)。它也仍在META标签中使用。


您是说“链接标记不推荐使用名称”,而是“链接目标不推荐使用名称”吗?实际上,链接目标可以是iframe。如果您没有为该iframe指定name属性,则目标属性不适用于该链接。这种行为仍然适用于所有浏览器,并且符合HTML5。
瑟2015年

我在这里试图找出如何使一个链接,如标记为你走到哪里 当你有一个网址两端“#something”。据我所知,在HTML之前的4之前,它必须是<a name="something">。在html 4中,它是<a name="something" id="something">(匹配),在html 5中,它是<a id="something">,尽管id可以是任何对象的“全局属性”。我无法弄清楚的是,html 5中的<a> 是否允许除ID之外的名称。好的实验,无论我碰巧拥有
哪种

9
<form action="demo_form.asp">
<label for="male">Male</label>
<input type="radio" name="sex" id="male" value="male"><br>
<label for="female">Female</label>
<input type="radio" name="sex" id="female" value="female"><br>
<input type="submit" value="Submit">
</form>


6

name Vs id

名称

  • 元素名称。例如,服务器用于标识表单提交中的字段。
  • 支撑要素是 <button>, <form>, <fieldset>, <iframe>, <input>, <keygen>, <object>, <output>, <select>, <textarea>, <map>, <meta>, <param>
  • 名称不必唯一。

ID

  • 通常与CSS一起使用以设置特定元素的样式。此属性的值必须唯一。
  • Id是Global属性,尽管这些属性可能对某些元素没有影响,但它们可用于所有元素。
  • 在整个文档中必须唯一。
  • 与允许使用空格分隔值的类属性相反,此属性的值不得包含空格。
  • 使用除ASCII字母和数字之外的其他字符,“ _”,“-”和“。”。可能会导致兼容性问题,因为HTML 4中不允许使用。尽管HTML 5中取消了此限制,但ID应当以字母开头以确保兼容性。

我已经看到name样式元素中使用的属性。我认为这是无效的?
Synetech '16

5

表单输入元素的ID与该元素中包含的数据无关。ID用于将元素与JavaScript和CSS挂钩。但是,名称属性在浏览器发送到服务器的HTTP请求中用作与值属性中包含的数据关联的变量名称。

例如:

<form>
    <input type="text" name="user" value="bob">
    <input type="password" name="password" value="abcd1234">
</form>

提交表单后,表单数据将包含在HTTP标头中,如下所示:

如果添加ID属性,它将不会更改HTTP标头中的任何内容。它将使其更容易与CSS和JavaScript挂钩。


2

如果您不使用表单本身的Submit方法将信息发送到服务器(而是使用javascript来完成),则可以使用name属性将额外的信息附加到输入中-就像将其与隐藏的输入值配对一样,但看起来更整洁,因为它已合并到输入中。

尽管我认为将来可能不会允许使用此位,但它目前在Firefox中仍然有效。

只要您不打算提交老式的方法,就可以有多个具有相同名称值的输入字段。


1

基于个人经验并根据W3学校对属性的描述:

ID是全局属性,几乎适用于HTML中的所有元素。它用于唯一地标识Web页面上的元素,并且其值通常是从前端访问的(通常是通过JavaScript或jQuery)。

名称是对HTML中的特定元素(例如表单元素等)有用的属性。它的值主要发送到后端进行处理。

https://www.w3schools.com/tags/ref_attributes.asp


0

以下是id属性的有趣用法。它在标记内使用,用于标识边界外元素的形式,以便它们将与表单中的其他字段一起包括。

 <form action="action_page.php" id="form1">
 First name: <input type="text" name="fname"><br>
 <input type="submit" value="Submit">
 </form>

 <p>The "Last name" field below is outside the form element, but still part of the form.</p>
 Last name: <input type="text" name="lname" form="form1">

0

ID:1)用于通过文档对象模型(通过Javascript或CSS样式)识别HTML元素。2)ID应该在页面中是唯一的。

名称与表单元素相对应,并标识发布回服务器的内容。范例:

<form action="action_page.php" id="Myform">
 First name: <input type="text" name="FirstName"><br>
 <input type="submit" value="Submit">
 </form>

 <p>The "Last name" field below is outside the form element, but still part of the form.</p>
 Last name: <input type="text" name="LastName" form="Myform">

0

ID用于唯一标识元素。

名称用于表格中。尽管您提交了表格,但是如果您不提供任何名称,则不会提交任何内容。因此,表单元素需要一个名称,才能通过“ get或push”之类的表单方法进行标识。

并且只有name属性的那些将消失。


0

id将给元素的ID,所以一旦你编写真正的代码(如JavaScript),你可以使用id阅读元素。我name只是一个名称,因此用户可以看到元素的名称。

例:

<h1 id="heading">text</h1>
<script>
  document.getElementById("heading"); //Reads the element that has the id "heading".
</script>
//You can also use something like this:
document.getElementById("heading").value; //Reads the value of the selected element.

有帮助吗?让我知道是否有问题。


0

id和名称之间没有字面差异。

name是标识符,在浏览器发送到服务器的http请求中用作与与元素的value属性中包含的数据关联的变量名称。

另一方面,id是浏览器,客户端和JavaScript的唯一标识符。因此表单需要一个id,而其元素需要一个名称。

id更专门用于将属性添加到唯一元素中。在DOM方法中,Id在Javascript中用于引用要对其执行操作的特定元素。

例如:

<html>
<body>

<h1 id="demo"></h1>

<script>
document.getElementById("demo").innerHTML = "Hello World!";
</script>
</body>
</html>

可以通过name属性实现相同的功能,但最好在表单和名称中使用id来输入小形式的元素,例如输入标签或选择标签。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.