我正在尝试在 javascript 中做下拉水平菜单。它在 Firefox 和 Chrome 上运行良好,但在 IE 中给我带来了麻烦。
这是我的代码
function init(){
hideAllSubMenu();
var menuItem = document.getElementById("menu_wrap").getElementsByTagName("div");
for(var index = 0; index < menuItem.length; index++)
{
// if firefox and all oother browsers
if(typeof menuItem[index].addEventListener != "undefined")
{
menuItem[index].addEventListener("mouseover", ShowListener, false);
menuItem[index].addEventListener("click", ShowListener, false);
}
else //IE
{
menuItem[index].attachEvent("onclick", ShowListener);
menuItem[index].attachEvent("onmouseover", ShowListener);
}
}
}
function ShowListener(event)
{
hideAllSubMenu();
var menuItemIdStr = this.id;
var menuItemIdNum = menuItemIdStr.replace(/menu/i, "");
var subMenu = document.getElementById("submenu_wrap" + menuItemIdNum);
subMenu.style.left = this.offsetLeft + "px";
subMenu.style.top = this.offsetTop + this.offsetHeight + 2 + "px";
subMenu.style.display = "block";
}
它似乎在抱怨这个。我知道在 IE 事件监听器函数不是复制而是参考,这就是为什么这给了我一个问题。有没有办法解决这个问题?
我什至尝试为 IE 的 attachEvent 创建单独的函数,并直接在那里路径对象,但是它仍然在抱怨。
类似的东西
menuItem[index].attachEvent("onmouseover", ShowListenerIE(menuItem[index]));
注意:我确实计划将这个简单的菜单功能重写为 JQuery,但现在我对学习 JavaScript Core + DOM 很感兴趣,并且想找到解决这个问题的方法。
提前致谢。