2015-08-14 253 views
2

我試圖找出當一些自定義事件正在發射。這個網站是用jQuery設計的。所以我想爲所有的事件添加一個事件監聽器。我試過了:jquery觸發任何和所有自定義事件的功能

$('*').on('*', function(e) { 
    console.log('custom event name that just triggered:', e.eventName, 'selector of element that it triggered on:', e.target); 
}); 

這沒有奏效。我知道如果我看到所有這些都會導致糟糕的表現,那就是爲什麼我不想看標準事件,只是定製事件。

+3

正如一邊:你想附加一個事件偵聽器*每個*事件的*每個* DOM節點?這可能會導致頁面崩潰 - 或者大幅度降低性能(請考慮'mousemove'觸發的頻率);試着將事件監聽器附加到'body'元素上(儘管這不能解決問題的「* every event *」方面)。 –

+1

請檢查這個答案:http://stackoverflow.com/questions/7439570/how-do-you-log-all-events-fired-by-an-element-in-jquery – Moussawi7

+0

謝謝@DavidThomas,但不是爲標準事件,我只想捕獲所有* custom *事件名稱。 – Noitidart

回答

1

有一種方法可以生成添加到頁面的所有事件的列表,但是我建議不要在生產代碼中執行它。如果你完全可以避免這樣做,那很好,但基本上你想在加載頁面上的任何其他JavaScript之前運行下面的代碼片段。

var events = {}; 
var original = window.addEventListener; 

window.addEventListener = function(type, listener, useCapture) { 
    events[type] = true; 
    return original(type, listener, useCapture); 
}; 

這會給你一個對象,其鍵是你的觸發器。

然後,您可以使用這些鍵生成您可以傳遞給jQuery的事件的一個鏈接列表。

var list = Object.keys(events).join(" "); 

$('*').on(list, function(e) { 
    console.log(
     'custom event name that just triggered:', e.eventName, 
     'selector of element that it triggered on:', e.target); 
}); 
+0

感謝羅賓,我沒有在生產中使用,我只需要這個在網站上的研究我試圖做一個書籤爲。該網站是推特,我無法在加載之前添加此代碼,有沒有運行時間的方法可能嗎?所以似乎獲得標準事件,是手動過濾出來的唯一方法(如從列表中刪除標準事件)? – Noitidart

+1

我希望有一些方法可以在頁面載入中儘早運行它,也許可以通過突出顯示最早的JS行和刷新,這可能對您有所幫助。有關您可能需要過濾的標準事件列表,請查看https://developer.mozilla。組織/ EN-US /文檔/網絡/活動。應該相當簡單地將它們的列表添加到上面的代碼中,並跳過添加到標準事件列表中的任何'type'的'events'對象。 –

+0

謝謝羅賓!我會實驗:) – Noitidart

相關問題