2010-08-09 136 views
1

下面的代碼將不會工作:再回到事件處理函數返回未定義

function dnd(){ 
} 
var ele = document.getElementById("relative"); 
ele.addEventListener("click",dnd,false); 
document.write(ele.onclick); 

輸出爲undefined。我猜輸出應該是function onclick(event){dnd();}

我應該怎麼做才能解決這個問題?

任何建議表示讚賞。

+1

什麼是這裏的大局觀?你想達到什麼目的? – Pointy 2010-08-09 14:05:57

回答

2

有3種常見方法將事件附加到DOM節點。

addEventListener()方法是按照W3C DOM中的規定註冊事件偵聽器的方法。它有很多好處,但不適用於Internet Explorer。對於Internet Explorer,您必須使用提供類似功能的attachEvent()方法。

另一方面,onclick屬性是附加事件處理程序的較舊的,但更受支持的方式。然而它有一些缺點,例如只允許一個事件處理程序用於每個事件。

至於如何取回連接到特定節點的事件處理程序,它取決於您用於附加事件的方法。你的例子的問題是你使用addEventListener()方法來附加事件,然後嘗試使用onclick屬性來讀取它。

您可能想看看下面的堆棧溢出後進一步閱讀到這個話題,特別是在post by @Crescent Fresh

0

的onclick屬性僅要告訴你一個事件處理程序,如果它是通過標記註冊的內聯(例如,<div id="relative" onclick="alert('foo');"></div>)。

爲什麼你需要閱讀事件處理程序?這是一件相對陌生的事情...

+1

好吧,它也可以顯式設置Javascript的「onclick」屬性。 – Pointy 2010-08-09 14:05:24

0

建立事件處理程序有不同的方式,它們在DOM中使用不同的機制。特別是—,正如你發現的經驗—通過「addEventListener」添加事件監聽器不會影響元素的「onclick」屬性。這些機制簡單地分開。

0

這是W3C事件註冊的電流限制的一個模型。如果你使用JS方法註冊,那麼沒有標準的方法來獲得處理程序。

最新的DOM LEVEL 3 Events W3C增加了eventListenerList規範。我想我們在瀏覽器上對此API缺乏一些密切的支持。

中,當然,如果你使用傳統方式



     

 

那麼你的例子會工作添加你的方法。

一些計算器鏈接

link text