Доступ к функциям, связанным с обработчиками событий, с помощью jQuery - PullRequest
50 голосов
/ 05 марта 2010

С помощью jQuery вы можете привязать функции к событию, инициируемому в объекте DOM, используя .bind() или одну из вспомогательных функций обработчика событий.

jQuery должен как-то хранить это внутренне, и мне интересно, возможно ли получить объект DOM, узнать, какие события были привязаны к объекту, получить доступ к этим функциям и т. Д. Желаемый результат возврата может выглядеть примерно так:

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

Ответы [ 2 ]

66 голосов
/ 07 июня 2012

jQuery 1.7 перестал отображать события в обычной функции data ().Вы все еще можете получить их так:

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

Обратите внимание, что это работает только для событий, которые были связаны с использованием jQuery.На самом деле, вы не можете увидеть все события, которые были связаны, используя обычные функции DOM, такие как addEventListener.

Их можно увидеть в инспекторе веб-наборов: на вкладке «Элементы» перейдите к нужному узлу DOM, с правой стороны выберите выпадающий «Event Listeners».

35 голосов
/ 05 марта 2010

Редактировать : метод ниже работает только в jQuery <1,7 </em>

В этой статье вы найдете много интересных советов и хитростей: Что вы можете не знать о 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!
...