我在使用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>


在我的JavaScript中,我想找到topnav。完整的代码(直至保释)是这样的:

<script>

 window.onload = init();

 function init() {
  // Show current menu
  showCurrentMenu();
 }

 function showCurrentMenu() {
  hideMenus(); // Hide all menus and then show the current one
  topnav = document.getElementById('topnav');
  ... rest of code ...
 }

 function hideMenus() {
  var divlist = document.getElementsByTagName('div');
  for(var ii=0; ii<divlist.length; ii++) {
   if(divlist[ii].className != divlist[ii].className.replace('lowernav','')) {
    divlist[ii].className += ' hidden';
   }
  }
 }


...然后还没有到达的其他代码...

我在这里做错什么了吗?可能确实很明显,但是对于我的一生,我看不到!非常感谢所有建议。

ETA:好的,这是目前的完整代码:

<script>
 window.onload = init;

 function init() {
  // Show current menu
  showCurrentMenu;
  // Attach 'onmouseover' event to main menu items
  topnav = document.getElementById('topnav');
  // Get all items in list
  var menulist = topnav.getElementsByTagName('a');
  for(var ii=0; ii<menulist.length; ii++) {
   menulist[ii].onmouseover = showMenu;
  }

  document.getElementById('mainHomeNav').onmouseout = restoreMenu;
 }

 function restoreMenu(e) {
  var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;
  if (targ.id == "mainHomeNav") {
   showCurrentMenu;
  }
 }

 function hideMenus() {
  var divlist = document.getElementsByTagName('div');
  for(var ii=0; ii<divlist.length; ii++) {
   if(divlist[ii].className != divlist[ii].className.replace('lowernav','')) {
    divlist[ii].className += ' hidden';
   }
  }
 }

 function showCurrentMenu() {
  hideMenus;
  topnav = document.getElementById('topnav');
  // Get all items in list
  var menulist = topnav.getElementsByTagName('a');
  for(var ii=0; ii<menulist.length; ii++) {
   if(menulist[ii].className != menulist[ii].className.replace('thisSection','')) {
    var thisid = menulist[ii].id;
    var thissubmenu = document.getElementById(thisid + '_sub');
    thissubmenu.className = thissubmenu.className.replace(/hidden/g,'');
   }
  }
 }

 function showMenu() {
  hideMenus;
  // show this menu
  var submenu_id = this.id + '_sub';
  var submenu = document.getElementById(submenu_id);
  submenu.className = submenu.className.replace(/hidden/g,'');
 }
</script>

最佳答案

问题是

window.onload = init();


这将立即调用init函数,然后将其返回值用作页面的onload函数。你需要:

window.onload = init;


仅在页面完全加载后才调用init函数。

07-28 02:27
查看更多