可以说几乎每个做过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,meta和param。例如为Object定义参数<PARAM NAME = "appletParameter" VALUE = "value">或Meta中<META NAME = "Author" CONTENT = "Dave Raggett">。
显然这些用途都不是能简单的使用ID来代替掉的,所以HTML元素的ID和Name的却别并不是身份证号码和姓名这样的区别,它们更本就是不同作用的东西。
当然HTML元素的Name属性在页面中也可以起那么一点ID的作用,因为在DHTML对象树中,我们可以使用document.getElementsByName来获取一个包含页面中所有指定Name元素的对象数组。Name属性还有一个问题,当我们动态创建可包含Name属性的元素时,不能简单的使用赋值element.name = "..."来添加其Name,而必须在创建Element时,使用document.createElement('<element name = "myName"></element>')为元素添加Name属性。这是什么意思啊?看下面的例子就明白了。
<script language="JavaScript">
var input = document.createElement('INPUT');
input.id = 'myId';
input.name = 'myName';
alert(input.outerHTML);
</script>
消息框里显示的结果是:<INPUT id=myId>。
<script language="JavaScript">
var input = document.createElement('<INPUT name="myName">');
input.id = 'myId';
alert(input.outerHTML);
</script>
消息框里显示的结果是:<INPUT id=myId name=myName>。
初始化Name属性的这个设计不是IE的缺陷,因为MSDN里说了要这么做的,可是这样设计的原理什么呢?我暂时没有想太明白。
这里再顺便说一下,要是页面中有n(n>1)个HTML元素的ID都相同了怎么办?在DHTML对象中怎么引用他们呢?如果我们使用ASPX页面,这样的情况是不容易发生的,因为aspnet进程在处理aspx页面时根本就不允许有ID非唯一,这是页面会被抛出异常而不能被正常的render。要是不是动态页面,我们硬要让ID重复那IE怎么搞呢?这个时候我们还是可以继续使用document.getElementById获取对象,只不过我们只能获取ID重复的那些对象中在HTML Render时第一个出现的对象。而这时重复的ID会在引用时自动变成一个数组,ID重复的元素按Render的顺序依次存在于数组中。
name=id
一个是netscape的 一个microsoft的 都是标记对象名称
---------------------------------------------------------------
表单元素(form input textarea select)与框架元素(iframe frame)用 name
这些元素都与表单(框架元素作用于form的target)提交有关, 在表单的接收页面只
接收有name的元素, 赋ID的元素通过表单是接收不到值的, 你自己可以验证一下.
当然上述元素也可以赋ID值, 赋ID值的时候引用这些元素的方法就要变一下了.
赋 name: document.formName.inputName document.frames("frameName")
赋 ID : document.all.inputID document.all.frameID
只能赋ID不能赋name的元素:(除去与表单相关的元素都只能赋ID)
body li a table tr td th p div span pre dl dt dd font b 等等
就提交表单而言,还是使用name较简单
如果非要使用id提交表单,可以参照下面的办法
<script language="javascript">
function submitForm()
{
this.location="form.asp?input="+document.getElementById("input1").value;
}
</script>
<form method="post" action="form.asp">
<input id="input1"/>
<div onclick="submitForm" style="cursor:hand">提交</div>
</form>
form.asp中用request.QueryString("input")来获得表单内容
其实这种方法无论是否在表单中都可以使用,比表单的使用根据有灵活性,但使用方法也较表单复杂。
分享到:
相关推荐
private LinkedList<E> elements = new LinkedList<>(); ``` **构造方法**: ```java public Stack() { // 初始化空栈 } ``` **入栈(push)方法**: ```java public void push(E element) { elements.addFirst...
<html> <!-- HTML文件开始 --> <head> <!-- HTML文件的头部开始 --> ... ... <!-- HTML文件的头部内容 --> </head> <!-- HTML文件的头部结束 --> <body> <!-- HTML文件的主体开始 -->...
<br><br>VLAN学习笔记大全(2):VLAN的访问链接<br>交换机的端口<br><br> 交换机的端口,可以分为以下两种:<br><br> l 访问链接(Access Link)<br><br> l 汇聚链接(Trunk Link)<br><br> 接下来就让我们来依次...
还要注意的是id属性也会被克隆,也就是克隆后会有两个相同id的元素(如果克隆对象有设置的话),这很容易会导致其他问题,程序会把克隆table的id属性设空。 ps:table请用class来绑定样式,用id的话新table就获取不...
<div class="scrollsidebar" id="hhService"> <div class="side_content"> <div class="side_list"> <div class="side_title"> <a title="隐藏" class="close_btn"><span>关闭</span></a></div> <div class=...
<p><fontface>六、稳定性安全性:MvMmall_V5.0.0我们在开发过程中,对一些不安全因素和代码都做了过滤,并且在一些容易引起安全问题的页面的元素重新初始化,使得我们的系统在安全稳定方面有着不错的表现。</font></...
•Mqrkup是由<或>及字符串组成,如<img />,<p></p>; •是一种编程语言,也是用浏览器解释的语言。 CSS基础 CSS是Cascading style sheets的缩写 •是一种用来表现HTML样式的语言; •不能独立使用 •没有html就没有...
echo '支持[<span class="red">'.$comm->setSupport($_GET["cid"], 1).'</span>]'; }else if($_GET["action"]=="2"){ echo '反对[<span class="red">'.$comm->setSupport($_GET["cid"], 2).'</span>]'; } //...
Tate<br/><br/>下载网址:<br/>http://www.j2medev.com/ebook/jese/200605/701.html<br/><br/>书籍图片:<br/>http://www.j2medev.com/ebook/UploadSoftPic/200605/20060531090149545.jpg<br/><br/><br/>Java 的...
之前需要对 el-button 做二次封装,所以就用到 vue 的 $attrs 和 $listeners 属性,这两个属性在这不细说,可以在这里 查看详情。 二次封装代码(limit-button) <template> <el v-show=validButton v-bind=$...
<br>Tapestry框架是一个位于java servlet容器和Tapestry应用程序之间的层。Tapestry不是一个独立运行的服务器;它是一个servlet的扩展,它运行于servlet容器(例如Tomcat)或包含servlet容器的应用服务器中(如Jbose...
本书分为三部分,*部分是介绍HTML5的移动端布局和不同平台下Node.js和Cordova的环境搭建,第二部分介绍Cordova的常用核心API,包含了事件处理,地理位置,Web存储,多媒体等等。第三部分介绍了HTML5高级API中的几个...
《细说PHP》作为一本面向PHP应用开发新手的入门教材,覆盖了PHP语言的基础知识和应用实践。书中内容既实用又全面,这使得它非常适合那些刚接触PHP或者准备开始PHP学习的读者。 首先,初学者需要了解的是PHP的基础...
本人写的一个文件操作的帮助类。包括:<br/>1)建立,读取,删除文件等基础方法<br/>2)获得读取文件的流,并可以设置读取文件的编码方式,从而有效...<br/>4)其他还有把两个文件合成一个文件等等方法,就不一一细说。
在`web.xml`部署描述符中,可以通过`<servlet>`、`<servlet-mapping>`等元素来配置Servlet,定义Servlet的类名、URL映射等信息。 5. **HTTP请求与响应** Servlet主要处理HTTP请求,并生成HTTP响应。`...
C++语言虽然兼容C,也支持C语言的类型转换用法,是将类型用圆括号括起来,这种转换可视性比较差,难以跟踪错误的转换。... 这四个操作符的使用方法是相同的,都是cast-name<Type>(expression),Type是被转换值expr
3. JSP基本结构:讲解JSP页面的基本组成元素,如HTML标记、脚本元素(<%...%>)、脚本let、声明、表达式和指令(<%@...%>)。 4. JSP动态内容:通过实例展示如何在JSP中嵌入Java代码,实现动态网页功能,如显示时间...
细说PHP中strlen和mb_strlen的区别 //测试时文件的编码方式要是UTF8 $str='\u4e2d\u6587a\u5b571\u7b26'; echo strlen($str).'<br>';//14 echo mb_strlen($str,'utf8').'<br>';//6 echo mb_strlen($str,'gbk').'<br>...