var oldTrigger = jQuery.event.trigger;
jQuery.event.trigger = function(event, data, elem) {
// do stuff
oldTrigger.apply(this, arguments);
}
sólo tiene que Throughly comprobación de que cada gatillo no ir a través de este método.
trigger: function(type, data) {
return this.each(function() {
jQuery.event.trigger(type, data, this);
});
},
Por lo menos $.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);
}
alternativa, se puede sobrescribir jQuery.data
e interceptar la configuración de controladores de eventos.
for (var i = 0, l = this.length; i < l; i++) {
jQuery.event.add(this[i], type, handler, data);
}
El método utiliza bind
jQuery.event.add
para agregar controladores. 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 eventos 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 que 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.triggered ?
jQuery.event.handle.apply(eventHandle.elem, arguments) :
undefined;
};
}
¿Qué está escribiendo el controlador de eventos a jQuery.data(elem)
donde elem
es un nodo DOM.
[[En conclusión]]
Personalmente, diría que jQuery.data
es complejo y un dolor para sobrescribir de forma segura por lo que en lugar de simplemente sobrescribir jQuery.event.add
.
[[vivo Ejemplo]]
http://jsfiddle.net/qLRuT/8/
acercamiento agradable pero había que modificar el código jQuery anulando la misma. Voto de todos modos;) – Nikhil
Parece que todo pasa por ese método, excepto los eventos de navegador estándar, pero eso es lo suficientemente bueno para mis propósitos. ¡Gracias! –
@Nikhil - Estoy bien parcheando el método en tiempo de ejecución. Simplemente no quería tocar la fuente. :) –