吐槽垃圾IE

likeajin 2012-06-08 10:14:22
看下面的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>
...全文
296 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
三石-gary 2012-06-08
  • 打赏
  • 举报
回复
这应该是ie8以下的一个Bug ..默认name和id 是一样的
yibey 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 3 楼 的回复:

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

我ie8可以,,ie7 弹出的是txt12
[/Quote]

我也是这样了
likeajin 2012-06-08
  • 打赏
  • 举报
回复
这些问题很久以前就发现了,这里只是帖出来,提醒再次遇到这种问题的同志们。
001007009 2012-06-08
  • 打赏
  • 举报
回复
ie对name和id的解释同其他浏览器不一样,很可能将name当成id来用,因此,在定义表单元素的name的时候,不要和其他dom的id重名。容易出现逻辑错误。
likeajin 2012-06-08
  • 打赏
  • 举报
回复
总而言之,垃圾IE对标准支持的实在恶心人,吐槽!!!
「已注销」 2012-06-08
  • 打赏
  • 举报
回复
标准的JS在IE下有这个问题,如果你使用标准的JS代码,建议使用ID来命名控件,name一般是在GET提交时,使用Request.From来获取的,Request.From无法获取ID只能获取name
三石-gary 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

IE8啊,弹不出abc的,弹出的是txt12
[/Quote]
我ie8可以,,ie7 弹出的是txt12
不懂游走 2012-06-08
  • 打赏
  • 举报
回复
这个是由于不同浏览器对于函数的实现不同所致,我最近在学习相关知识,《JavaScript高级程序设计》这本书还不错,里面讲的比较细致,网上可以下载到中文第二版的超清pdf版本,现在貌似已经出了第三版,有时间的话可以看看
likeajin 2012-06-08
  • 打赏
  • 举报
回复
IE8啊,弹不出abc的,弹出的是txt12
三石-gary 2012-06-08
  • 打赏
  • 举报
回复
abc 啊。。有什么问题?
一起混吧 2012-06-08
  • 打赏
  • 举报
回复
我用ie9可以取到。楼主用哪个版本测试的?
likeajin 2012-06-08
  • 打赏
  • 举报
回复
求证:我把这个页面放到web服务器上,这里用的是tomcat,IE8弹出'txt12',直接用IE打开这个html文件,弹出的是'abc'
scjypzh 2012-06-08
  • 打赏
  • 举报
回复
IE8无问题,弹出的是abc
likeajin 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 的回复:]
好吧,不过你想提醒大家的隐患估计没几个不知道的,这个问题在网络上早就被传烂了。。所以才会有同时给表单元素加上相同的id和name的说法
[/Quote]
悲剧了,怎么我以前没看到过,第一次遇到的时候查不到资料,纠结了好久 :(
峭沙 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 的回复:]

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

麻烦看完整个帖子,我发这个帖的目的不是来自讨没趣,是你在跟我纠结这个问题,我的目的很简单,提醒大家注意这个隐患!
[/Quote]好吧,不过你想提醒大家的隐患估计没几个不知道的,这个问题在网络上早就被传烂了。。所以才会有同时给表单元素加上相同的id和name的说法
紫魂一号 2012-06-08
  • 打赏
  • 举报
回复
恩也许是,这种弱语言很多没规范的,难说。最怕的就是出些乱七八糟的东西,让人摸不着头脑
likeajin 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 的回复:]
我说过了,低版本IE会混淆name和id,也就是说document.getElementById("txt12")可能会取到name为txt12的元素,不过这并不是问题,问题是你name的取值和另外一个元素的id值相同,这本身就是自讨没趣。
[/Quote]
麻烦看完整个帖子,我发这个帖的目的不是来自讨没趣,是你在跟我纠结这个问题,我的目的很简单,提醒大家注意这个隐患!
峭沙 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]

引用 20 楼 的回复:

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

哥哥啊,我是在load事件中写的代码,两个input,你确定document.getElementById('txt12')能获取到id为'txt12'的那个input?!
[/Quote]我说过了,低版本IE会混淆name和id,也就是说document.getElementById("txt12")可能会取到name为txt12的元素,不过这并不是问题,问题是你name的取值和另外一个元素的id值相同,这本身就是自讨没趣。
likeajin 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]

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

那你就试试嘛,尴尬了……这种情况下,低版本的IE是获取不到对应的那个input的,就像三石说的,是个bug
峭沙 2012-06-08
  • 打赏
  • 举报
回复
呃,代码没仔细看,你的代码并没有在dom加载之前执行。不过document.getElementById('txt12')取不到相应的input是不可能的事情
加载更多回复(10)

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧