我一直在使用基本的javascript下拉菜單,使用addEventListener和attachEvent來處理點擊和鼠標功能。 click事件subOpen調用的函數使用javascript「this」關鍵字來獲取被單擊元素的id。找到一個JavaScript「this」關鍵字替代Internet Explorer
樣品添加事件:使用「this」關鍵字
//add event listeners to menuitems
for (var i=0; i < menuitems.length; i++) {
if (menuitems[i].addEventListener) {
menuitems[i].addEventListener('click', subOpen, false);
menuitems[i].addEventListener('mouseout', closeTimer, false);
menuitems[i].addEventListener('mouseover', cancelTimer, false);
menuitems[i].addEventListener('selectstart', menucursorselect, false);
} else if (menuitems[i].attachEvent) {
menuitems[i].attachEvent('onclick', subOpen);
menuitems[i].attachEvent('onmouseout', closeTimer);
menuitems[i].attachEvent('onmouseover', cancelTimer);
menuitems[i].attachEvent('onselectstart', menucursorselect);
}
}
的subOpen功能的示例:
function subOpen() {
cancelTimer(); //stops the close timer
if (submenudisplay) {
document.getElementById(submenudisplay).style.display = "none";
activeSubMenu = false;
}
var curMenuId = this.id;
var curSubMenuId = this.id + "submenu";
if (curSubMenuId) {
document.getElementById(curSubMenuId).style.display = "block";
activeSubMenu = true;
}
submenudisplay = curSubMenuId;
現在,一切工作在所有我只是測試的瀏覽器早期版本的Internet Explorer。對於舊版本的IE,調試器將「this.id」標記爲未定義,因此它不知道要打開哪個子菜單。我做了一些研究,發現舊的IE不會在附加事件時複製函數,而是引用它,所以我無法使用「this」關鍵字捕獲任何有用的數據。
我想知道是否有一個不同的關鍵字或功能,我可以使用它來完成與舊版IE瀏覽器相同的功能。
我的測試代碼完整版,可以發現here:
我討厭建議大的嚇人的框架,但是這是那種東西的jQuery擅長做的事情。這非常方便,它足夠好地處理Internet Explorer。 – zneak
我將jQuery描述爲_warm和fuzzy_,而不是_big和scary_。在這個時代,幾乎可以理解你在使用JavaScript時使用jQuery。 – jahroy
@jahroy:這是無稽之談。 –