我正在嘗試在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