2012-07-12 39 views
0

我將一些事件處理程序附加到不同的元素,如輸入,選擇...和窗口。如果當前元素是窗口或常用html元素,我需要檢查內部處理程序。我應該如何進行檢查?如何確定當前元素是窗口

實施例:

inputTextEl.attachEvent( 「一些事件」,處理程序);

inputButtonEl.attachEvent(「some event」,handler);

window.attachEvent(「some event」,handler);

var handler = function (eventName) { 
    return function() { 
    var message = '[' + eventName + ']'; 
    if (window.event) { 
     message += ' eventType: ' + window.event.type; 

     var target = window.event.srcElement || window.event.target; 
     var id = target.id; 
     if (id == '') { 
        id = target.parentNode.id; 
     } 
     message += ' ;eventTarget: ' + id; 
    } else { 
      message += ' window.event - undefined'; 
    } 
    console.log(message); 
}; }; 
+0

這是什麼意思用於導致某些事件只適用於'window'?例如,如果事件正在點擊,用戶將在窗口內點擊*某個特定的HTML元素*。如果你可以提供你的實際用例,而不僅僅是抽象的代碼,這將是有幫助的。 – apsillers 2012-07-12 15:52:10

+0

我需要將關於觸發事件的信息記錄到控制檯。我想獲得像「eventType:onclick; eventTarget:elementId」 – Kate 2012-07-12 15:55:25

回答

0

可以在函數處理

alert(Window.event.srcElement.tagName); 

而對於Firefox和Chrome使用下面的代碼對IE使用

alert(this.tagName); 
+0

在IE Window.event.srcElement = undefined如果事件被附加到窗口對象。在FF和Ch event.target返回窗口,但event.target.tagName未定義,因爲窗口對象沒有標籤。 – Kate 2012-07-12 15:49:51

+0

我更新了示例,但它僅適用於常見html元素 – Kate 2012-07-12 16:25:02

+1

該窗口沒有標籤名稱。然而,你可以比較這兩個對象:'if(this === window)// do something' – 2012-07-12 16:41:09

0

一些瀏覽器使用event.target,其他人使用event.srcElement

function handler(ev) { 
    var event = window.event || ev; 
    var target = event.srcElement || event.target; 
    // event has the lowest-level element that is the target of the event 
} 

大多數事件將永遠不會有window作爲它們的目標,因爲您不能單擊/ mouseover/etc窗口本身;相反,您可以在窗口內的特定元素上執行這些操作。

+0

好吧,我有uniq函數將任何事件附加到任何事件(包含窗口)無論該事件是否可以升級爲當前元素都沒關係 - 因爲它是uniq函數。因此,我需要檢查元素的類型,以便附加事件 – Kate 2012-07-12 16:15:23

+0

如果事件冒泡了dom樹,那麼最終窗口將成爲目標,除非您通過在事件處理程序中返回false來取消冒泡。 – 2012-07-12 16:39:53

+0

@Torsten你在技術上是正確的; 'event.currentTarget'用於冒泡,但在較早的IE版本中不支持它,並且似乎沒有任何明顯的替代品。另外,在事件處理程序中返回'false'時運行'stopPropagation'和'preventDefault'是一個有用的* jQuery *特性,而不是普通的JS行爲。 – apsillers 2012-07-12 17:08:57

相關問題