看下面的html:同志们请注意,IE下获取不到name为abc的input元素<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title></title>
<script type="text/javascript">
function test(e){
  alert(document.getElementById('txt12').name);
}
</script></head>
<body onload="test()">
<form>
<input name="txt12" type="text" style="width:95%;height:100%;font-family: 宋体;font-size:9pt;color:Gray;" runat="server" value="自动编号" readonly="readonly"/>
<input id="txt12" name='abc' type="text" style="width:95%;height:100%;font-family: 宋体;font-size:9pt;color:Gray;" runat="server" value="自动编号" readonly="readonly"/>
</form>
</body>
</html>

解决方案 »

  1.   

    IE8啊,弹不出abc的,弹出的是txt12
      

  2.   

    这个是由于不同浏览器对于函数的实现不同所致,我最近在学习相关知识,《JavaScript高级程序设计》这本书还不错,里面讲的比较细致,网上可以下载到中文第二版的超清pdf版本,现在貌似已经出了第三版,有时间的话可以看看
      

  3.   

    我ie8可以,,ie7 弹出的是txt12
      

  4.   

    标准的JS在IE下有这个问题,如果你使用标准的JS代码,建议使用ID来命名控件,name一般是在GET提交时,使用Request.From来获取的,Request.From无法获取ID只能获取name
      

  5.   

    ie对name和id的解释同其他浏览器不一样,很可能将name当成id来用,因此,在定义表单元素的name的时候,不要和其他dom的id重名。容易出现逻辑错误。 
      

  6.   

    这应该是ie8以下的一个Bug ..默认name和id 是一样的
      

  7.   

    楼主写的有问题吧应该这么写alert(document.getElementByName('abc').value);
      

  8.   

    document.getElementById('txt12')  这个貌似是获取ID为 txt12 的控件吧。。自己写错了,而不是IE的问题。
      

  9.   

    更正一下:回复的请注意看清题目和内容<!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
    <title></title>
    <script type="text/javascript">
    function test(e){
      alert(document.getElementById('txt12').name);
    }
    </script></head>
    <body onload="test()">
    <form>
    <input name='txt12' type='text'/>
    <input id="txt12" name='abc' type='text'/>
    </form>
    </body>
    </html>PS:不知道是不是我的IE8有问题,看navigator.userAgent.toLowerCase();显示的是:
    mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0; infopath.2; .net clr 2.0.50727)但IE8以下是有错的,类似15楼的同学,请你们多看看前面别人的发言,再多试试再发言,谢谢!
      

  10.   

    低版本IE确实会混淆id和name,你可以用getAttribute来避开此类问题<!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
    <title></title>
    <script type="text/javascript">
    function test(e){
      alert(document.getElementById('txt12').getAttribute("name"));
    }
    </script></head>
    <body onload="test()">
    <form>
    <input name="txt12" type="text" style="width:95%;height:100%;font-family: 宋体;font-size:9pt;color:Gray;" runat="server" value="自动编号" readonly="readonly"/>
    <input id="txt12" name='abc' type="text" style="width:95%;height:100%;font-family: 宋体;font-size:9pt;color:Gray;" runat="server" value="自动编号" readonly="readonly"/>
    </form>
    </body>
    </html>
      

  11.   

    问题是document.getElementById('txt12')都获取不到那个input,这个问题不做讨论,只是给大家提个醒,最好是id跟着走
      

  12.   

    document.getElementById('txt12')获取input完全没问题,是你的代码写在dom之前而已。。
      

  13.   

    document.getElementById('txt12')获取input完全没问题,是你的代码写在dom加载之前而已。。
      

  14.   

    哥哥啊,我是在load事件中写的代码,两个input,你确定document.getElementById('txt12')能获取到id为'txt12'的那个input?!
      

  15.   

    呃,代码没仔细看,你的代码并没有在dom加载之前执行。不过document.getElementById('txt12')取不到相应的input是不可能的事情
      

  16.   


    那你就试试嘛,尴尬了……这种情况下,低版本的IE是获取不到对应的那个input的,就像三石说的,是个bug
      

  17.   

    我说过了,低版本IE会混淆name和id,也就是说document.getElementById("txt12")可能会取到name为txt12的元素,不过这并不是问题,问题是你name的取值和另外一个元素的id值相同,这本身就是自讨没趣。
      

  18.   

    好吧,不过你想提醒大家的隐患估计没几个不知道的,这个问题在网络上早就被传烂了。。所以才会有同时给表单元素加上相同的id和name的说法
      

  19.   

    求证:我把这个页面放到web服务器上,这里用的是tomcat,IE8弹出'txt12',直接用IE打开这个html文件,弹出的是'abc'