jQueryでは、特定の要素のイベントに単にアクセスすることはできません。文書化されていない内部メソッドを使用してそれらにアクセスできます
$._data(element, "events")
しかし、それでもまだすべてのイベントが表示されるわけではありません。正確には、割り当てられたイベントは表示されません
$([selector|element]).on()
これらのイベントはドキュメント内に保存されるため、ブラウジングして取得できます
$._data(document, "events")
しかし、ウェブページ全体のイベントがあるので、それは大変な作業です。
上記のトムGは、特定の要素のイベントのみを対象にドキュメントをフィルタリングし、両方のメソッドの出力をマージする関数を作成しましたが、出力にイベントを複製するという欠点がありました(そして、要素のjQuery内部イベントリストがアプリケーションと混ざっています)。私はその欠陥を修正し、以下のコードを見つけることができます。それを開発コンソールまたはアプリのコードに貼り付け、必要に応じて実行して、特定の要素のすべてのイベントの一覧を取得します。
注意すべき重要なことは、要素は実際にはjQueryオブジェクトではなくHTMLElementです。
function getEvents(element) {
var elemEvents = $._data(element, "events");
var allDocEvnts = $._data(document, "events");
function equalEvents(evt1, evt2)
{
return evt1.guid === evt2.guid;
}
for(var evntType in allDocEvnts) {
if(allDocEvnts.hasOwnProperty(evntType)) {
var evts = allDocEvnts[evntType];
for(var i = 0; i < evts.length; i++) {
if($(element).is(evts[i].selector)) {
if(elemEvents == null) {
elemEvents = {};
}
if(!elemEvents.hasOwnProperty(evntType)) {
elemEvents[evntType] = [];
}
if(!elemEvents[evntType].some(function(evt) { return equalEvents(evt, evts[i]); })) {
elemEvents[evntType].push(evts[i]);
}
}
}
}
}
return elemEvents;
}