2010-10-11 42 views
3

有沒有一種方法可以找到JavaScript中的元素的所有事件?或者從元素中解除所有事件的方式?元素事件列表

謝謝。

回答

3

有沒有辦法做到這一點,直接使用JavaScript。

jquery有幾個函數來跟蹤這些數據。

一種「純粹」的方式是通過原型(搜索關於JavaScript原型的東西,而不是框架)來更改addEventListener/attachEvent函數。

或者,如果您有自定義功能來增加/刪除事件,您可以調整它。

好吧,就是這樣。

+0

我使用自定義函數addEvents(處理ie等)。有沒有一種方法來保存所有的事件(名稱和函數)添加到一個元素? – errorhandler 2010-10-11 21:52:28

+0

嗨錯誤處理程序,我懷疑你正在使用自定義函數來處理IE的addEvent。嗯,我認爲你可以調整這個函數,添加到事件數據的全局變量/對象 - 目標元素,目標事件,和回調函數,然後在這個自定義var/object中添加一些函數來檢索所需的數據。 – Dave 2010-10-11 22:16:24

2

當然! 看看這個綁定/解除綁定事件 http://api.jquery.com/category/events/ 和使用jQuery的代碼片段獲得的密鑰對「事件名稱/功能委託」

jQuery(elem).data('events'); 
+0

這隻適用於已經使用jQuery的情況。 – 2010-10-11 21:43:06

+0

有沒有辦法做到沒有jQuery? – errorhandler 2010-10-11 21:44:23

+0

那麼,afaik所需要的就是包含jQuery API。該代碼塊也適用於不直接受jQuery約束的事件。 – NinjaCross 2010-10-11 21:45:59

3

HashSet的形式綁定到一個元素的所有事件如果你不想使用jQuery,一個快速和骯髒的方式(並且肯定會更好)將循環遍歷元素的參數並檢查以'on'開頭的函數(onclick等)。

var el = document.getElementById('elementid') ; 
el.onclick = function(e) { console.log('Clicked!') ; } ; // Attached test event. 
if(typeof(el)=='object') { 
    for(var i in el) { 
     if(i.substr(0,2) == 'on' && typeof(el[i])=='function') { 
     el[i] = function() {} ; // Unbind with null function. 
     } 
    } 
} 
+0

謝謝,我會試一試 – errorhandler 2010-10-11 21:45:45

+1

不適合我:( – errorhandler 2010-10-11 21:53:27