2012-06-07 59 views
13

我仍然不能相信這是不可能的,但是有沒有辦法通過dom循環並查看使用'addEventListener'附加的所有事件處理程序。 This post和許多其他人說不。如何使用JavaScript在DOM節點上查找事件偵聽器

如果是這種情況,那麼像Chrome的檢查員或Firebug這樣的應用程序如何顯示它們,它們是幹什麼的?我想他們可能會以某種方式增加dom的方法,以便跟蹤綁定的內容。

+0

你在哪裏看到Chrome或Firebug顯示事件監聽器? –

+0

是的,我很想知道你在哪裏看到他們!我已經下載了顯示它們的Firebug插件,但你可能是正確的,他們在某種程度上跟蹤任何事件監聽器,當他們綁定 – Ian

+1

在Chrome瀏覽器中,點擊頂部的「元素」選項卡。這是左邊最遠的一個。在dom中選擇一個元素,然後在右側有一個關於您選擇的元素(如樣式,屬性等)的信息列表。列表中的最後一個是事件監聽器,它會爲您提供所需的所有信息。但是,您只能看到所選元素的信息,而不是整個DOM。加我問這個問題:) – screenm0nkey

回答

25

鉻的控制檯有一個方法,可以幫助你檢查一個DOM節點註冊了任何事件偵聽器,例如檢查連接到事件監聽器文檔節點使用:

https://developers.google.com/chrome-developer-tools/docs/commandline-api#geteventlistenersobject

getEventListeners(document); 

你可以遞歸遍歷所有DOM節點,找到連接所有事件處理程序 如果需要的話。

+2

getEventListeners(myDomElement)在Chromium v​​.25開發人員工具控制檯中工作,但在實際代碼中會引發錯誤。 –

+0

@Robinlikethebird是的,'getEventListeners'是一個chrome devtools控制檯提供的方法,我正在尋找一種可以在運行時查找綁定到dom的事件的方法。現在,我只是找到jquery方法'$ .data(element,'events')'。我正在尋找一種簡單的JavaScript或DOM方式。 – novaline

0

在Chrome V53控制檯I嘗試:

getEventListeners(文件);

返回:

__proto__:對象

和子元素,不是我要找的。

所以我已經試過:

getEventListeners(窗口);

返回

對象{beforeunload:數組[1],負載:數組[1]}

這就是我要找的。 所以我認爲,正確的做法是羅賓就像鳥的方式:

getEventListeners(myDomElement):

其中myDomElement是目標對象與喜歡的getElementById等標準的方式得到了..

0

使用以下函數獲取註冊事件的json;

getEventListeners(node_name);其中node_name可以是元素名稱或其ID。

相關問題