Elements By ClassName失败

时间:2012-02-26 00:25:42

标签: javascript

我在JavaScript中创建滑动菜单,以下是我的init()函数:

function init() {
   var menus = new Array();
   var allElems = document.getElementsByTagName("*");

   for (var i = 0; i < allElems.length; i++) {
      alert(allElems[i]);
      if (allElems[i].className == "navG") {
      alert(allElems[i]);
      menus.push(allElems[i]); 
      }
   }

   /* assign the openMenu function to the onclick event for each
      Menus item */
    for (var i = 0; i < menus.length; i++) {
       alert(menus[i]);
       menus[i].onclick=openMenu;
    }

    document.getElementById("logo").onclick = closeMenu;
    document.getElementById("linkList").onclick = closeMenu;
    document.getElementById("main").onclick = closeMenu;
}

问题似乎出现在第一个for循环中。这绝对是正确的类名。仅供参考,这是我所指的HTML类型:

<div class="navG" id="gallery1" style="position: absolute; top: 180px; left: -150px; " >

有没有明显或不那么明显的原因,这不是在菜单中添加元素?

3 个答案:

答案 0 :(得分:2)

你这里有一个错误

document.getElementById("logo").onclick = closeMenu();
document.getElementById("linkList").onclick = closeMenu();
document.getElementById("main").onclick = closeMenu();

你调用closeMenu,而不是分配它。

需要

document.getElementById("logo").onclick = closeMenu;
document.getElementById("linkList").onclick = closeMenu;
document.getElementById("main").onclick = closeMenu;

答案 1 :(得分:0)

哎呀,你在第一个循环中错过"navG"周围的引号。

答案 2 :(得分:0)

在您链接到的页面中,在family.js脚本中,此行:

window.onLoad = init();

表示立即运行init函数 并将其返回值分配给window.onLoad。因为它立即运行,实际文档尚未被解析,因此它找不到任何元素。你需要这样说:

window.onload = init;

init函数的引用分配给window.onload,以便在解析完所有元素后,稍后运行该函数。

同样onload应该有一个小写的l

(您的代码中还有其他一些问题,例如,您似乎没有带有"linkList""main"的元素,但我认为我上面说的是主要问题你要问的部分。)