Manejar todos los types de events en jQuery

En una aplicación que usa jQuery, me gustaría iniciar session en la console cada vez que se desencadena un tipo de evento, incluidos los personalizados.

¿Hay alguna forma de hacerlo sin modificar la fuente de jQuery y sin enlazar a una gran list larga de todos los types de events posibles?

var oldTrigger = jQuery.event.trigger; jQuery.event.trigger = function(event, data, elem) { // do stuff oldTrigger.apply(this, arguments); } 

Solo necesito verificar minuciosamente que cada activador pase por este método.

 trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, 

Por lo less $.fn.trigger pasa por jQuery.event.trigger

  // Trigger the event, it is assumed that "handle" is a function var handle = jQuery.data( elem, "handle" ); if ( handle ) { handle.apply( elem, data ); } 

Alternativamente, puede sobreescribir jQuery.data e interceptar la configuration de los manejadores de events.

 for ( var i = 0, l = this.length; i < l; i++ ) { jQuery.event.add( this[i], type, handler, data ); } 

El método bind usa jQuery.event.add para agregar controlleres. También puedes interceptar eso.

 jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { // Handle event binding jQuery.fn[ name ] = function( fn ) { return fn ? this.bind( name, fn ) : this.trigger( name ); }; if ( jQuery.attrFn ) { jQuery.attrFn[ name ] = true; } }); 

Todos los events estándar pasan por $.fn.trigger o $.fn.bind

 if ( name === "live" ) { // bind live handler context.each(function(){ jQuery.event.add( this, liveConvert( type, selector ), { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); }); 

$.fn.live pasa por jQuery.event.add .

En conclusión, todo pasa por jQuery.event.add y eso a su vez hace esto:

  if ( !eventHandle ) { elemData.handle = eventHandle = function() { // Handle the second event of a trigger and when // an event is called after a page has unloaded return typeof jQuery !== "undefined" && !jQuery.event.triggenetworking ? jQuery.event.handle.apply( eventHandle.elem, arguments ) : undefined; }; } 

Que está escribiendo el controller de events en jQuery.data( elem ) donde elem es un nodo DOM.

[[ En conclusión ]]

Personalmente, diría que jQuery.data es complejo y un poco jQuery.event.add sobrescribir de forma segura, en su lugar, simplemente sobrescriba jQuery.event.add .

[[ Live Ejemplo ]]

http://jsfiddle.net/qLRuT/8/