我在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; " >
有没有明显或不那么明显的原因,这不是在菜单中添加元素?
答案 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"
的元素,但我认为我上面说的是主要问题你要问的部分。)