日期:2014-05-17  浏览次数:20625 次

HTML中的ID和Name区别详解

type浏览器中用于出入的控件(比方说type="text",这就是一个文本框;type="button",这就是一个按钮)
type可选的值如下:
button 按钮
checkbox 复选按钮组件
file 文件上传组件
hidden 隐藏域
image 图片区域
password 密码输入文本框
radio 单选按钮组件
reset 重置表单按钮
submit 提交表单按钮
text 文本输入框
***********************************************************************
id是唯一标识符,不允许有重复值(类似数据表的主键,pk),可以通过它的值来获得对应的html标签对象。(如果在同一页面代码中,出现重复的id,会导致不可预料的错误)
js代码:document.getElementById("id_value")
根据指定的id获得它的对象引用
***********************************************************************
name和id的功能是一样的,同样用来标识html标签,但唯一不同的是name允许有重复的值。
js代码:document.forms[0].name或document.getElementsByName("name")
根据指定的name获得它的对象引用数组
***********************************************************************
value代表某个html标签的值
打个比方:<input type="text" name="seq" value="hello!" id="seq007" />
你将看到网页中文本框的内容为“hello!”
///////////////////////////////////////////////////////////////////////
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script>

</script>
</head>
<body>
<form>
<input type="text" name="seq" value="" id="seq001" />
<input type="text" name="seq" value="" id="seq002" />
<input type="text" name="seq" value="" id="seq003" />
</form>
</body>
</html>
///////////////////////////////////////////////////////////////////////
document.getElementById("seq001")获得的是id=seq001的这个对象标签的引用
document.forms[0].seq
将返回网页中第一个表单里面所有name=seq的标签对象引用数组
document.getElementsByName("seq")
将返回网页中所有name=seq的标签对象引用数组

************************************************************************************

____________________________________________________________________________________

************************************************************************************

可以说几乎每个做过Web开发的人都问过,到底元素的ID和Name有什么区别阿?为什么有了ID还要有Name呢?! 而同样我们也可以得到最classical的答案:ID就像是一个人的身份证号码,而Name就像是他的名字,ID显然是唯一的,而Name是可以重复的。

    上周我也遇到了ID和Name的问题,在页面里输入了一个input type="hidden",只写了一个ID='SliceInfo',赋值后submit,在后台用Request.Params["SliceInfo"]却怎么也去不到值。后来恍然大悟因该用Name来标示,于是在input里加了个Name='SliceInfo',就一切ok了。

    第一段里对于ID和Name的解答说的太笼统了,当然那个解释对于ID来说是完全对的,它就是Client端HTML元素的Identity。而Name其实要复杂的多,因为Name有很多种的用途,所以它并不能完全由ID来代替,从而将其取消掉。具体用途有:

    用途1: 作为可与服务器交互数据的HTML元素的服务器端的标示,比如input、select、textarea、和button等。我们可以在服务器端根据其Name通过Request.Params取得元素提交的值。
    用途2: HTML元素Input type='radio'分组,我们知道radio button控件在同一个分组类,check操作是mutex的,同一时间只能选中一个radio,这个分组就是根据相同的Name属性来实现的。
    用途3: 建立页面中的锚点,我们知道<a href="URL">link</a>是获得一个页面超级链接,如果不用href属性,而改用Name,如:<a name="PageBottom"></a>,我们就获得了一个页面锚点。
    用途4: 作为对象的Identity,如Applet、Object、Embed等元素。比如在Applet对象实例中,我们将使用其Name来引用该对象。
    用途5: 在IMG元素和MAP元素之间关联的时候,如果要定义IMG的热点区域,需要使用其属性usemap,使usemap="#name"(被关联的MAP元素的Name)。
    用途6: 某些特定元素的属性,如attribute,和param。例如为Object定义参数<PARAM NAME = "appletParameter" VALUE = "value">。

    显然这些用途都不是能简单的使用ID来代替掉的,所以HTML元素的ID和Name的却别并不是身份证号码和姓名这样的区别,它们更本就是不同作用的东西。

    当然HTML元素的Name属性在页面中也可以起那么一点ID的作用,因为在DHTML对象树中,我们可以使用document.getElementsByName来获取一个包含页面中所有指定Name元素的对象数组。

    在这里顺便说一下,要是页面中有n(n>1)个HTML元素的ID都相同了怎么办?在DHTML对象中怎么引用他们呢?如果我们使用ASPX页面,这样的情况是不容易发生的,因为aspnet进程在处理aspx页面时根本就不允许有ID非唯一,这是页面会被抛出异常而不能被正常的render。要是不是动态页面,我们硬要让ID重复那IE怎么搞呢?这个时候我们还是可以继续使用document.ge