1

我在 javascript 中创建多个行星对象来处理动画。

动画适用于每个星球,但我在 IE 6/7 中遇到错误,说“第 15 行字符 2 上需要对象”

代码:

var earthObj = null;
var mercObj = null;
var jupiObj = null;
var animate;
function init()
{
    mercObj = document.getElementById('mercury');
    earthObj = document.getElementById('earth');
    jupiObj = document.getElementById('jupiter');

    mercObj.style.position= 'relative';  
    mercObj.style.left = '54px'; 
    mercObj.style.visibility = 'hidden';

    earthObj.style.position= 'relative';  //error on this line
    earthObj.style.left = '80px'; 
    earthObj.style.top = 300px';
}
4

3 回答 3

1

在尝试调用对象之前,请测试它是否存在。

earthObj = document.getElementById('earth');
if(!earthObj) {
  alert("Could not find Earth");
  return;
}
于 2012-05-14T00:08:52.043 回答
0

我在 mac 上,没有任何 IE 可以尝试。如果您像这样更改代码,您是否会收到相同的错误:

function init() {
  var earthObj = null;
  var mercObj = null;
  var jupiObj = null;
  var animate;

  mercObj = document.getElementById('mercury');
  earthObj = document.getElementById('earth');
  jupiObj = document.getElementById('jupiter');

  mercObj.style.position= 'relative';  
  mercObj.style.left = '54px'; 
  mercObj.style.visibility = 'hidden';


  !earhtObj && alert("There is no element with id 'earth'");
  earthObj.style.left = '80px'; 
  earthObj.style.top = '300px';
  earthObj.style.position= 'relative'; 
}

我来到这篇文章,并认为该错误是否可能与 IE6/7 错误有关,该错误会在某些全局变量与 dom 对象同名时触发。

我还将 移到earthObj.style.position= 'relative';块的末尾,并期望错误会在earthObj.style.left = '80px';

于 2012-05-14T00:06:00.407 回答
0

我发现在 IE 中,如果脚本在定义/生成的 HTML 元素之后,该函数就可以工作。

即将脚本放在 HTML 文档的末尾,而不是开头,或者使用 jquery 的 ready 函数:

$(function() {
   mercObj = document.getElementById('mercury');
});
于 2014-11-06T16:24:03.387 回答