2

为什么下面的代码在 Firefox 和 Chrome 中运行良好,但在 IE6 和 IE8 中却报错?

<!DOCTYPE html>
<html>  
<head></head>  
<body>
<div id="abc"></div>
<script type="text/javascript">
var doLoad = function() {
  // error in ie6 and ie8
  abc = document.getElementById("abc"); 
  abc.innerHTML = "hello world!"; 
  // correct in ie6 and ie8
  /*
  var abc = document.getElementById("abc"); 
  abc.innerHTML = "hello world!";
  */
  // correct in ie6 and ie8
  /* 
  xyz = document.getElementById("abc"); 
  xyz.innerHTML = "hello world!";
  */
}
window.onload = doLoad;
</script>  
</body>  
</html>

但是如果我在var之前添加document.getElementById("abc");或重命名abcxyz,它将在 IE6 和 IE8 中运行良好。

4

2 回答 2

4

IE 为每个具有 ID 的元素创建一个全局 JavaScript 变量。这些变量不能被覆盖 afaik 并导致各种问题。

要记住的事情:不要创建与元素 ID 同名的全局变量。根本不要创建全局变量。

于 2012-04-15T11:35:48.143 回答
3

当您错过 var 语句时,它会将变量分配给 window 对象。所以它是一样的window.abc = document.getElementById('abc');

但是 window.abc 正是 id 为 abc 的 div 并且在 IE 中你不能给它赋值。

于 2012-04-15T11:35:59.953 回答