Javascript Internet Explorer在getElementById上引发错误

Javascript Internet Explorer在getElementById上引发错误,javascript,internet-explorer,Javascript,Internet Explorer,我在使用getElementById的javascript时遇到问题。它在FF、Safari和Chrome中运行良好,但IE(8-还没有尝试过其他产品)则可以退出 html的相关部分是一个名为topnav的div: <div id="topnav"> ... some HTML ... <div> <div id="sub_1" class="lowernav"> ... some HTML ... </div> &

我在使用getElementById的javascript时遇到问题。它在FF、Safari和Chrome中运行良好,但IE(8-还没有尝试过其他产品)则可以退出

html的相关部分是一个名为topnav的div:

  <div id="topnav">
   ... some HTML ...
  <div>
  <div id="sub_1" class="lowernav">
   ... some HTML ...
  </div>
  <div id="sub_2" class="lowernav">
   ... some HTML ...
  </div>

... 一些HTML。。。
... 一些HTML。。。
... 一些HTML。。。
在我的javascript中,我想找到topnav。完整代码(直到它被释放的位置)如下所示:


window.onload=init();
函数init(){
//显示当前菜单
showCurrentMenu();
}
函数showCurrentMenu(){
hideMenus();//隐藏所有菜单,然后显示当前菜单
topnav=document.getElementById('topnav');
…其余的代码。。。
}
函数hideMenus(){
var divlist=document.getElementsByTagName('div');
对于(var ii=0;ii而言,问题是

window.onload = init();
这将立即调用init函数,然后将其返回值用作页面的onload函数。您需要:

window.onload = init;
只有在页面完全加载后才会调用init函数。

问题在于

window.onload = init();
这将立即调用init函数,然后将其返回值用作页面的onload函数。您需要:

window.onload = init;

只有在页面完全加载后才会调用init函数。

您的问题在于以下几行:

window.onload = init(); // this will CALL init() and assign the return value
由于
init
不返回任何内容,
window.onload
将是
未定义的

现在,它在IE中不起作用,但在其他浏览器中起作用的原因是,这些其他浏览器可能已经解析了DOM的一部分,因此对
showCurrentMenu
的调用起作用

但这也可能会中断,因为从技术角度来看,文档不能保证加载,要解决这一问题,您必须通过执行以下操作将实际函数引用分配给
window.onload

window.onload = init;

您的问题在于以下几行:

window.onload = init(); // this will CALL init() and assign the return value
由于
init
不返回任何内容,
window.onload
将是
未定义的

现在,它在IE中不起作用,但在其他浏览器中起作用的原因是,这些其他浏览器可能已经解析了DOM的一部分,因此对
showCurrentMenu
的调用起作用

但这也可能会中断,因为从技术角度来看,文档不能保证加载,要解决这一问题,您必须通过执行以下操作将实际函数引用分配给
window.onload

window.onload = init;

我发现了问题-我在“topmenu”前面没有“var”

所以不是

topnav = document.getElementById('topnav');
应该是的

var topnav = document.getElementById('topnav');

谢谢大家的帮助。

我发现了问题-我在“topmenu”前面没有“var”

所以不是

topnav = document.getElementById('topnav');
应该是的

var topnav = document.getElementById('topnav');

谢谢大家的帮助。

谢谢,但我更改了它,它仍然会出错。@Sharon那么你必须向我们展示更多的代码,因为现在我看不出任何其他错误。@Sharon,啊,我知道你在那里做了什么:)你删除了所有的
()
从函数调用中,当然将不再调用,您只需要将它们从
窗口中删除。onload
assignment,因为您告诉脚本“make window.load指向函数init”。但是在所有其他情况下,您都希望调用函数,因此必须保留
()
在那里。我强烈建议您阅读一本好的JavaScript教程,如:谢谢,但我更改了它,它仍然会给出错误。@Sharon那么您必须向我们展示更多的代码,因为现在,我看不出任何其他错误。@Sharon,啊,我知道您在那里做了什么:)您删除了所有的
()
从函数调用中,当然将不再调用,您只需要将它们从
窗口中删除。onload
assignment,因为您告诉脚本“make window.load指向函数init”。但是在所有其他情况下,您都希望调用函数,因此必须保留
()
在这里。我强烈建议您阅读一本好的JavaScript教程,如:+1,以获得正确答案。在尝试调试时,容易犯错误,也容易错过。+1是正确答案。容易犯错误,也容易在尝试调试时错过。