2008-11-21 54 views
4

在firefox中,當您向某個方法添加onclick事件處理函數時,事件對象會自動傳遞給該方法。除此之外,這允許檢測哪個特定元素被點擊的能力。例如Firefox中的Firefox樣式onclick參數

document.body.onclick = handleClick; 

function handleClick(e) 
{ 
    // this works if FireFox 
    alert(e.target.className); 
} 

有沒有什麼辦法可以在IE中近似?我需要能夠檢測哪些元素被點擊從身體元素的事件處理程序。

+0

很少有一點擔心在JavaScript這樣inconcistancies ,你應該使用一個框架(例如jQuery)來處理這種煩人的工作。 – micmcg 2008-11-23 23:15:03

回答

7

下面是我會做的情況下,我不能使用jQuery

document.body.onclick = handleClick; 

function handleClick(e) 
{ 
    //If "e" is undefined use the global "event" variable 
    e = e || event; 

    var target = e.srcElement || e.target; 
    alert(target.className); 
} 

這裏是一個jQuery的解決方案

$(document.body).click(function(e) { 
    alert($(this).attr("class")); 
}); 
+0

在您的jQuery示例中,傳遞事件沒有意義。 – James 2008-11-21 15:19:19

0

我認爲IE瀏覽器使用了一個名爲event的變量。看看是否有效?

2

在IE它

e.srcElement 
3

那是不是認可的符號來添加事件DOM節點。

if (el.addEventListener){ 
    el.addEventListener('click', modifyText, false); 
} else if (el.attachEvent){ 
    el.attachEvent('onclick', modifyText); 
} 

推薦的用於綁定點擊事件的符號跨瀏覽器友好。

參見:

另外,當點擊一個事件時,所執行的回調函數包含一個對象「這個」,它是被點擊的實體。

function foo() { 
    window.open(this.src, '_blank'); 
} 
+0

顯然,高級事件註冊模式有其好處,但大部分人可以使用傳統的註釋模式。 (傳統表示法的一個好處是屏幕閱讀器的效果更好) – James 2008-11-21 15:17:44