JavaScript:Internet Explorer中document.getElementById()处出错

JavaScript:Internet Explorer中document.getElementById()处出错,javascript,internet-explorer,Javascript,Internet Explorer,我目前在JavaScript中遇到一个错误。代码如下所示 function loader() { size = window.innerWidth; size = size - 300; mainj = document.getElementById('main1'); mainj.style.left = size.toString() + 'px'; submainj = document.getElementById('submain1');

我目前在JavaScript中遇到一个错误。代码如下所示

function loader() {
    size = window.innerWidth;
    size = size - 300;
    mainj = document.getElementById('main1');
    mainj.style.left = size.toString() + 'px';
    submainj = document.getElementById('submain1');
    submainj.style.left = size.toString() + 'px';
    size = mainj.style.top + 26;
    document.getElementById('submain1').style.top = size.toString() + 'px';
}
onload = loader();
这个错误只出现在InternetExplorer中,并且代码在Firefox中工作得非常好。错误显示在第五行,错误为

Message: Object required
Line: 34
Char: 1
Code: 0
URI: http://localhost/home.php
第34行是代码中给出的第5行-“mainj.style.left…”
如何解决此问题?

请确保您有一个ID为main1的DOM元素

如果它不存在,则代码将返回错误

您可以做的是有条件:

if(mainj  !== undefined) {  //if mainj is a real object
   //do code with mainj
}

还可以尝试在代码中使用局部变量(在变量前面加上单词
var
),这样它们就不会进入全局范围。

这是有问题的一行:

size=window.innerWidth-300;
据我所知,Internet Explorer没有窗口内部宽度的概念。下面的代码是一个不错的跨浏览器实现,与您在库中看到的类似。如果您还需要高度,则有相应的innerHeight和offsetHeight属性

var size = 0;
if(window.innerWidth) {
    size = window.innerWidth;
} else if (document.documentElement && document.documentElement.offsetWidth) {
    size = document.documentElement.offsetWidth;
} else if (document.body && document.body.offsetWidth) {
    size = document.body.offsetWidth;
}

格式化代码可能有助于人们阅读。另外,您是否尝试过调试
mainj
mainj.style
是否未定义格式?我不明白你有什么应该是10-15行代码塞进6没有缩进或间距。这样读很难。@a然后将每条指令拆分为一行,这样我们就可以准确地看到是哪条指令导致了错误。我知道了,是的,
mainj
似乎没有定义,但不应该是这样,因为存在id为“main1”的元素,并且该代码在firefox中运行得非常好,没有错误。虽然mainj可能没有定义,我认为错误实际上可能来自IE没有innerWidth属性。他说了行号(可能不正确),但随后描述了试图设置“style.left”属性的行。我说的是根据IE错误控制台显示的内容,但我猜错误实际上是Jordan说的,谢谢大家的回答。他可能想进入全局范围。@Neal,IE因给出奇怪的错误行号而臭名昭著。我不相信。是的,IE错误控制台告诉我错误在其他地方,但你的代码完成了工作,现在代码在IE中正常工作。