我正在尝试在javascript中下拉菜单。它在Firefox和Chrome上运行良好,但在IE中给我带来麻烦。attachEvent给出了问题
这里是我的代码有
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核心+ DOM,并想找到出路这个问题。
在此先感谢。
我在用var目标= event.srcElement到底去? event.srcElement:event.target; 我没有测试你给我的东西,但是你的解决方案看起来像是一个可以工作的东西 – Dmitris 2009-08-08 22:56:32
如果你真的希望事件处理器的“this”上下文被设置为你调用该函数的对象,那么你将需要使用“call”或“apply”方法和返回闭包的函数。 例如(menuItem [index]));返回function(){ ShowListener.call(obj); }; } menuItem [index] .attachEvent(“onclick”,function(obj){ } – Alex 2009-08-09 04:15:43