最近在查看用户提交信息发现很多 undefined 的内容
仔细检查 JS AJAX提交部分又没发现什么问题,郁闷至极.
通过分析用户数据发现出问题的用户都有一个共通点——使用搜狗浏览器
下载了一个一试,果然 undefined 重现。
但其他浏览器中都没有任何问题,甚至连极其恶心的IE6也很听话,为什么搜狗就这么不给力呢?
在纠结很久后终于发现了问题所在:
在搜狗中在取一个dom对象时使用
document.getElementById('test');
时,它并不会只找 "id"属性为"test"的dom对象。而是在"name"属性和"id"属性都去寻找,也就是说它把"name"和"id"属性等同处理为"id"了。
如果页面中有"id"为"test"和"name"为"test"的两个不同dom对象,那么它会返回第一个找到的对象(源码中先出现的)。
例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form>
<a name="test" href="javascript:void(0)">这是个链接</a>
<input id="test" type="text" value="测试文本" />
</form>
</body>
</html>
<script type="text/javascript">
obj=document.getElementById('test');
alert(obj.value);
</script>
说实话,这问题真是坑爹啊。足足浪费我一下午时间。
在这里鄙视下搜狗浏览器。
后续:
如果不遵循XHTML,所有使用IE核的浏览器都会出这个问题;
遵循XHTML,除了搜狗,就连蛋疼的360啦、IE6啦都是很听话的。