当使用HTML <input>标记时,使用名称和id属性之间的区别是什么,特别是我发现它们有时命名相同?
当前回答
name是传递值时使用的名称(在URL中或在发布的数据中)。id用于唯一标识CSS样式和JavaScript元素。
id也可以用作锚。在过去,它使用<a名称,但您也应该对锚使用id。名称仅用于发布表单数据。
其他回答
如果你使用JavaScript/CSS,你必须使用控件的“id”来应用任何CSS/JavaScript的东西。
如果使用name, CSS将不能用于该控件。例如,如果使用JavaScript日历附加到文本框,则必须使用文本控件的id为其分配JavaScript日历。
我希望下面的例子对你有帮助:
<!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'不等于以区分它们。
name是传递值时使用的名称(在URL中或在发布的数据中)。id用于唯一标识CSS样式和JavaScript元素。
id也可以用作锚。在过去,它使用<a名称,但您也应该对锚使用id。名称仅用于发布表单数据。
id用于在JavaScript或CSS中唯一地标识一个元素。
该名称用于表单提交。当您提交表单时,只有带有名称的字段将被提交。
id必须唯一
...在页面DOM元素树中,因此每个控件都可以通过其在客户端(浏览器页面内)上的id单独访问
页面中加载的JavaScript脚本 页面上定义的CSS样式
在页面上使用非唯一id仍然会呈现页面,但肯定是无效的。浏览器在解析无效的HTML时是很宽容的。但不要仅仅因为它看起来有效就这么做。
名字通常是唯一的,但可以共享
...在页面DOM中相同类型的几个控件之间(想想单选按钮),所以当数据被post到服务器时,只有一个特定的值被发送。因此,当你的页面上有几个单选按钮时,即使有几个同名的相关单选按钮控件,也只有选中的那个按钮的值会被传回服务器。
Addendum to sending data to server: When data gets sent to server (usually by means of HTTP POST request) all data gets sent as name-value pairs where name is the name of the input HTML control and value is its value as entered/selected by the user. This is always true for non-Ajax requests. In Ajax requests name-value pairs can be independent of HTML input controls on the page, because developers can send whatever they want to the server. Quite often values are also read from input controls, but I'm just trying to say that this is not necessarily the case.
当名字可以重复的时候
在任何表单输入类型的控件之间共享名称有时可能是有益的。但当吗?你没有说明你的服务器平台可能是什么,但如果你使用ASP之类的东西。NET MVC中,您可以获得自动数据验证(客户端和服务器)的好处,还可以将发送的数据绑定到强类型。这意味着这些名称必须与类型属性名称匹配。
现在假设你有这样的场景:
您有一个具有相同类型项列表的视图 用户通常一次处理一个项目,因此他们只会单独输入一个项目的数据并将其发送到服务器
因此,您的视图模型(因为它显示了一个列表)的类型是IEnumerable<SomeType>,但是您的服务器端只接受一个SomeType类型的项目。
那改名怎么样?
每个项都包装在自己的FORM元素中,并且其中的输入元素具有相同的名称,因此当数据到达服务器时(来自任何元素),它会正确地绑定到控制器操作所期望的字符串类型。
这个特殊的场景可以在我的创意故事迷你网站上看到。您可能听不懂这种语言,但您可以查看那些多种表单和共享名称。不用担心id也会重复(这是违反规则的),但这是可以解决的。在这种情况下,这无关紧要。
推荐文章
- 使伸缩项目正确浮动
- 形式内联内的形式水平在twitter bootstrap?
- 自定义元素在HTML5中有效吗?
- 如何触发自动填充在谷歌Chrome?
- 创建圈div比使用图像更容易的方法?
- 为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?
- 在网页上用鼠标模拟震颤(例如帕金森病)?
- Bootstrap抛出Uncaught错误:Bootstrap的JavaScript需要jQuery
- 如何改变文本区域的边框颜色:焦点
- 我如何设置背景颜色为文本的宽度,而不是整个元素的宽度,使用CSS?
- 如何删除和清除所有的本地存储数据
- 强制打开“另存为…”弹出打开文本链接点击PDF在HTML
- 如何修改标签文本?
- 在HTML中还有其他有用的空格码吗,比如半空格的 , em-spaces, en-spaces等等?
- 输入触发器按钮单击