51

.bind()jQuery を使用すると、またはイベント ハンドラー ヘルパー関数の 1 つを使用して、DOM オブジェクトでトリガーされるイベントに関数をバインドできます。

jQuery は何らかの方法でこれを内部に保存する必要があります。DOM オブジェクトを指定して、どのイベントがオブジェクトにバインドされているかを調べたり、それらの関数にアクセスしたりすることが可能かどうか疑問に思います。目的の戻り値は次のようになります。

{
  click: [function1, function2],
  change: [function3],
  blur: [function4, function5, function6]
}
4

2 に答える 2

69

jQuery 1.7 では、通常の data() 関数でイベントが公開されなくなりました。あなたはまだ次のようにそれらを得ることができます:

var elem = $('#someid')[0];
var data = jQuery.hasData( elem ) && jQuery._data( elem );
console.log(data.events);

これは、jQuery を使用してバインドされたイベントに対してのみ機能することに注意してください。私の知る限り、addEventListener のような通常の DOM 関数を使用してバインドされたすべてのイベントを表示する方法はありません。

ただし、Webkit インスペクターで確認できます。Elements タブで目的の DOM ノードに移動し、右側で [Event Listeners] ドロップダウンを選択します。

于 2012-06-07T11:26:50.910 に答える
36

編集以下の方法はjQuery < 1.7でのみ機能します

この記事では、多くの興味深いヒントとコツを見つけることができます: Things you may not know about jQuery

jQuery はdataイベント ハンドラーを格納するために使用しているようです。

jQuery のイベント ストレージを介して、要素 (または任意のオブジェクト) にバインドされたすべてのイベント ハンドラーにアクセスできます。

// List bound events:
console.dir( jQuery('#elem').data('events') );

// Log ALL handlers for ALL events:
jQuery.each($('#elem').data('events'), function(i, event){
    jQuery.each(event, function(i, handler){
        console.log( handler['handler'].toString() );
    });
});

// You can see the actual functions which will occur
// on certain events; great for debugging!
于 2010-03-05T16:10:50.237 に答える