使用HTML <input>标签时,使用nameid属性有什么区别,特别是我发现它们有时被命名为相同?


#1楼

  • name标识表单字段*; 因此,它们可以由代表这种字段的多个可能值的控件共享(单选按钮,复选框)。 它们将作为表单值的键提交。
  • id标识DOM元素; 所以他们可以成为CSS或Javascript的目标。

*名称也用于标识本地锚点,但这已被弃用,“id”是目前这样做的首选方式。


#2楼

如果您使用的是JavaScript / CSS,则必须使用控件的“id”来应用任何CSS / JavaScript内容。

如果使用name,则CSS不适用于该控件。 例如,如果您使用附加到文本框的JavaScript日历,则必须使用文本控件的id为其分配JavaScript日历。


#3楼

我希望您能找到以下有用的简短示例:

<!DOCTYPE html>
<html>
<head><script>function checkGender(){if(document.getElementById('male').checked) {alert("Selected gender: "+document.getElementById('male').value)}else if(document.getElementById('female').checked) {alert("Selected gender: "+document.getElementById('female').value)}else{alert("Please choose your gender")}}</script>
</head>
<body>
<h1>Select your gender:</h1><form><input type="radio" id="male" name="gender" value="male">Male<br><input type="radio" id="female" name="gender" value="female">Female<br><button onclick="checkGender()">Check gender</button>
</form>
</body>
</html>

在代码中,请注意两个'name'属性在定义'male'或'female'之间的可选性时是相同的,但'id'不等于区分它们。


#4楼

使用相同名称的一个有趣的例子:类型为checkbox input元素,如下所示:

<input id="fruit-1" type="checkbox" value="apple"  name="myfruit[]">
<input id="fruit-2" type="checkbox" value="orange" name="myfruit[]">

至少如果PHP处理了响应,如果同时选中这两个框,则POST数据将显示:

$myfruit[0] == 'apple' && $myfruit[1] == 'orange'

我不知道这种数组结构是否会与其他服务器端语言一起发生,或者name属性的值只被视为一个字符串,而且这是一种基于0的数组的PHP语法侥幸根据POST响应中的数据顺序构建,这只是:

myfruit[]       apple
myfruit[]       orange

不能用ids做那种伎俩。 HTML中id属性的有效值是什么? 似乎引用了HTML 4的规范(虽然他们没有给出引用):

ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“_”) ,冒号(“:”)和句号(“。”)。

因此,字符[]在HTML4中的ID或名称中都无效(在HTML5中它们可以正常使用)。 但是和html这么多东西一样,只是因为它无效并不意味着它不起作用或者不是非常有用。


#5楼

name用于DOM (文档对象模型)中的表单提交

ID用于DOM中html控件的唯一名称 ,专门用于JavascriptCSS


#6楼

添加对W3文档的一些实际引用,这些文档权威地解释了'name'属性在表单元素上的作用。 (为了它的价值,我来到这里,同时探究Stripe.js如何实现与支付网关Stripe的安全交互。特别是,什么原因导致表单输入元素被提交回服务器,或阻止它被提交? )

以下W3文档是相关的:

HTML 4: https : //www.w3.org/TR/html401/interact/forms.html#control-name第17.2节控件

HTML 5: https : //www.w3.org/TR/html5/forms.html#form-submission-0和https://www.w3.org/TR/html5/forms.html#constructing-the-form -data-set第4.10.22.4节构造表单数据集。

如其中所解释的,当且仅当它具有有效的“名称”属性时,浏览器将提交输入元素。

正如其他人所指出的,'id'属性唯一地标识DOM元素,但不参与正常的表单提交。 (虽然'id'或其他属性当然可以通过javascript使用来获取表单值,然后javascript可以用于AJAX提交等等。)

关于先前的答案/评论者的一个奇怪的问题是关于id的值和名称的值在同一名称空间中。 到目前为止,我从规范中可以看出,这适用于某些已弃用的name属性(不是表单元素)。 例如https://www.w3.org/TR/html5/obsolete.html :

“作者不应该在元素上指定name属性。如果属性存在,则其值不能是空字符串,并且不能等于元素的home子树中除元素自己的ID之外的任何ID的值,如果有的话,也不等于元素主子树中元素的任何其他名称属性的值。如果该属性存在且元素有ID,则属性的值必须等于元素的ID。在该语言的早期版本中,此属性旨在指定URL中片段标识符的可能目标。应使用id属性。“

很明显,在这种特殊情况下,'a'标签的id和name值之间存在一些重叠。 但这似乎是处理片段ID的一个特点,而不是由于id和名称的命名空间的一般共享。


#7楼

id用于唯一标识JavaScript或CSS中的元素。

该名称用于表单提交。 提交表单时,只会提交带有名称的字段。


#8楼

ID必须是唯一的

...在页面DOM元素树中,因此每个控件都可以通过其在客户端(在浏览器页面内)的id单独访问

  • 页面中加载了Javascript脚本
  • 页面上定义的CSS样式

在您的网页上拥有非唯一ID仍会呈现您的网页,但它肯定无效。 解析无效的HTML时,浏览器非常宽容。 但不要因为看起来它有效而不这样做。

名称通常是唯一的,但可以共享

...在同一类型的几个控件之间的页面DOM内(想想单选按钮),所以当数据被POST到服务器时,只发送一个特定的值。 因此,当您的页面上有多个单选按钮时,即使存在多个具有相同name相关单选按钮控件,也只会将所选的一个value发回服务器。

向服务器发送数据的附录 :当数据发送到服务器时(通常通过HTTP POST请求),所有数据都作为名称 - 值对发送,其中name是输入HTML控件的namevalue是输入/选择的value由用户。 对于非Ajax请求,这始终是正确的。 在Ajax请求中,名称 - 值对可以独立于页面上的HTML输入控件,因为开发人员可以将任何他们想要的内容发送到服务器。 通常也会从输入控件中读取值,但我只想说这不一定是这种情况。

名称可以复制

在任何表单输入类型的控件之间共享名称有时可能是有益的。 但当? 您没有说明您的服务器平台可能是什么,但如果您使用像Asp.net MVC这样的东西,您将获得自动数据验证(客户端和服务器)以及将发送数据绑定到强类型的好处。 这意味着这些名称必须匹配类型属性名称。

现在假设您有这种情况:

  • 你有一个视图与一个相同类型的项目列表
  • 用户通常一次使用一个项目,因此他们只能输入一个项目的数据并将其发送到服务器

因此,您的视图模型(因为它显示列表)的类型为IEnumerable<SomeType>但您的服务器端只接受一个SomeType类型的SomeType

那么名字分享怎么样?

每个项目都包含在自己的FORM元素中,并且其中的输入元素具有相同的名称,因此当数据到达服务器(来自任何元素)时,它将被正确绑定到控制器操作所期望的字符串类型。

这个特殊情况可以在我的Creative story迷你网站上看到。 您将无法理解该语言,但您可以查看这些多种表单和共享名称。 不要紧, ID也是重复的(违反规则),但可以解决。 在这种情况下,这无关紧要。


#9楼

一旦提交表单,名称就会定义属性的名称。 因此,如果您想稍后阅读此属性,您将在POST或GET请求中的“名称”下找到它。

而id用于在javascript或css中添加字段或元素。


#10楼

输入的name属性由其父HTML <form>用于将该元素包含为POST请求中的HTTP表单的成员或GET请求中的查询字符串。

id应该是唯一的,因为JavaScript应该使用它来选择DOM中的元素进行操作并在CSS选择器中使用。


#11楼

name是传递值时使用的名称(在url或发布的数据中)。 id用于唯一标识CSS样式和JavaScript的元素。

id也可以用作锚。 在过去, <a name用于此,但您也应该使用id作为锚点。 name仅用于发布表单数据。


#12楼

在HTML4.01中:

名称属性

  • 仅在<a><form><iframe><img><map><input><select><textarea>
  • 名称不必是唯一的,可用于将元素组合在一起,例如单选按钮和复选框
  • 不能在URL中引用,尽管JavaScript和PHP可以看到URL有解决方法
  • 在JS中使用getElementsByName()引用
  • id属性共享相同的命名空间
  • 必须以一封信开头
  • 根据规格区分大小写,但大多数现代浏览器似乎都不遵循这一点
  • 用于表单元素以提交信息。 仅将具有name属性的输入标记提交给服务器

Id属性

  • <base><html><head><meta><param><script><style><title>之外的任何元素都有效
  • 每个Id在浏览器中呈现的页面中应该是唯一的,这可能是也可能不是全部在同一个文件中
  • 可以在URL中用作锚引用
  • 使用#符号在CSS或URL中引用
  • 在JS中用getElementById()引用,jQuery用$(#<id>)引用
  • 与name属性共享相同的名称空间
  • 必须至少包含一个字符
  • 必须以一封信开头
  • 不得含有字母,数字,下划线(其它什么_ ),破折号( -冒号( : (),或句号.
  • 不区分大小写

在(X)HTML5中,除了以下内容之外,一切都是相同的:

名称属性

  • <form>不再有效
  • XHTML表示它必须全部小写,但大多数浏览器都不遵循这一点

Id属性

  • 适用于任何元素
  • XHTML表示它必须全部小写,但大多数浏览器都不遵循这一点

这个问题是在HTML4.01成为常态时编写的,许多浏览器和功能都与今天不同。


#13楼

name属性用于发布到例如web服务器。 id主要用于css(和javascript)。 假设你有这个设置:

<input id="message_id" name="message_name" type="text" />

为了在发布表单时使用PHP获取值,它将使用name-attribute,如下所示:

$_POST["message_name"];

如前所述,id用于样式,用于何时使用特定的css。

#message_id
{background-color: #cccccc;
}

当然,您可以对id和name-attribute使用相同的面额。 这两个不会相互干扰。

此外,名称可用于更多项目,例如当您使用radiobuttons时。 然后使用名称对您的单选按钮进行分组,因此您只能选择其中一个选项。

<input id="button_1" type="radio" name="option" />
<input id="button_2" type="radio" name="option" />

在这个非常具体的案例中,我可以进一步说明如何使用id,因为你可能想要一个带有radiobutton的标签。 Label有一个for-attribute,它使用输入的id将此标签链接到您的输入(当您单击标签时,选中该按钮)。 示例可以在下面找到

<input id="button_1" type="radio" name="option" /><label for="button_1">Text for button 1</label>
<input id="button_2" type="radio" name="option" /><label for="button_2">Text for button 2</label>

HTML输入 - 名称与ID相关推荐

  1. Excel 相同名称或ID的 内容 合并起来 同列不同内容剃加

    先将表格按相同名称或ID进行排序 这样重复的就在相邻的上下行 在后面新建一列 输入  =IF(M2=M3,E2&","&E3,E3) M就是相同的内容 E则是我们要 ...

  2. 【深度学习】ONNX 模型文件修改节点的名称,修改输入名称,修改输出名称

    想要修改onnx模型文件的节点名称,要么在最初的pytorch代码里去改,要么就直接在onnx模型文件里改. 而我这里直接在onnx模型文件改,我有一个onnx文件,输出节点的名字是这样的: 这不改就 ...

  3. 四级城市地区表 xlsx, sql文件,国内,中国省市县街道乡镇四级地址 (名称,联动ID,层级,是否末级(1-是))

    四级城市地区表 xlsx, sql文件,国内,中国省市县街道乡镇四级地址 ID 父ID 名称 联动ID 层级 是否末级(1-是) 110107 1101 石景山区 11-1101-110107 3 0 ...

  4. python网易云爬虫——实现网易云歌词的爬取(输入歌手的id,即可实现歌词的爬取)

    Python网易云爬虫--实现网易云歌词的爬取(输入歌手的id,即可实现歌词的爬取) 开始动手 打开网易云音乐,找到任意一位歌手的歌曲界面(我们以邓紫棋的<来自天堂的魔鬼>为例). 第一步 ...

  5. Android中资源id的获取,根据id获取资源以及根据资源名称获取id。

    1.如何获取资源id        layout布局中: @资源类型/资源名       java代码实现: R.资源类型.资源名    2.如何根据id获取资源       getResources ...

  6. 关于ASP.NET直接从一个项目复制WEB窗体后无法点出控件名称(ID)

    今天做项目的时候,直接把一个项目的WEB窗体复制到了另一个项目. 于是出现了一个问题:--不管往复制过来的窗体中添加什么控件都无法在后台代码中引用该控件的名称(ID).百思不得其解. 根据百度做了重新 ...

  7. dede调用当前顶级栏目名称、ID、url方法

    使用dede时,经常会碰到需要调用当前顶级栏目名称,而织梦默认{dede:field name='typename' /} 只可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名称. 在inc ...

  8. php怎么检查输入名称,PHP |通过$_POST []获取输入名称

    HTML示例: 用户填写输入字段:dfg@dfg.com echo $_POST['email']; //output: dfg@dfg.com 表单中每个输入的名称和值都将发送到服务器. 有没有办法 ...

  9. php和数据库的永久链接,php – WordPress永久链接,包括名称和ID,但仅考虑ID

    我有一个WordPress网站,我想模仿某些新闻媒体和门户网站生成他们的网址的方式. 例如,你有一篇名为"Man Loves Woman"的文章,CMS软件会创建一个这样的网址: ...

最新文章

  1. 用命令行非交互改密码
  2. cv python 样例_【CV实战】OpenCV—Hello world代码示例
  3. 更改记录表CDHDR和CDPOS
  4. android contacts电话查询头像,android透过查询电话号码获取联系人头像
  5. gkz cloud sql_使用Cloud SQL的Google App Engine全文搜索
  6. Win XP必须禁止的服务
  7. 高通平台开发实践经验
  8. 国士无双:卖掉美国房子,回国创办姚班,他只为培养一流的程序员!
  9. HTML5 Canvas(画布)
  10. Adobe AIR for Android 缓存本地数据常用方法
  11. 基于SSM的运动会管理系统
  12. 五大车载操作(VOS)系统优劣对比
  13. 数据仓库系列9- 大数据分析
  14. python 推箱子实验开发报告_推箱子游戏详细设计报告
  15. 结构化数据、半结构化数据、非结构化数据的对比
  16. 网络 DMZ 区和网络安全等级简介
  17. Java总结IO之总集篇
  18. Ubuntu18.04更换下载源时卡在waiting for unattended-upgr to exit(更换下载源 正在等待unattended-upgr 退出)问题的解决办法
  19. Megacli命令的使用总结
  20. 分享一下自己用的SQLite数据库密码操作小工具(含源码)

热门文章

  1. 六个方法查看linux硬盘使用状况
  2. 关于WSE_CLIPSIBLINGS
  3. JNI中String和char之间的相互转换
  4. lodop打印不显示页码_CAD上明明有图,但是打印的时候不显示怎么办?原来要这样设置...
  5. join,和循环删除,fromkeys,集合,拷贝
  6. select,poll,epoll
  7. 自定义checkbox,redio等
  8. JSON数据解析及gson.jar包
  9. 常见浏览器兼容问题、盒模型2种模式以及css hack知识讲解
  10. 新闻网站项目django--注册页