From 64179692a0eeadc7a6d93fe007bfc00990af6575 Mon Sep 17 00:00:00 2001 From: John Resig Date: Thu, 6 Jul 2006 05:43:26 +0000 Subject: [PATCH] Added in support for global event triggering. --- jquery/jquery.js | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/jquery/jquery.js b/jquery/jquery.js index 3e2d777e8..bd2f92fae 100644 --- a/jquery/jquery.js +++ b/jquery/jquery.js @@ -812,9 +812,14 @@ jQuery.event = { } handlers[handler.guid] = handler; element["on" + type] = jQuery.event.handle; + + var g = jQuery.event.global; + if (!g[type]) g[type] = []; + g[type].push( element ); }, guid: 1, + global: {}, // Detach an event or set of events from an element remove: function(element, type, handler) { @@ -830,10 +835,25 @@ jQuery.event = { jQuery.event.remove( element, j ); }, - trigger: function(element,type,data) { - data = data || [ jQuery.event.fix({ type: type }) ]; - if ( element && element["on" + type] ) + trigger: function(type,data,element) { + // Touch up the incoming data + data = data || []; + + // Handle triggering a single element + if ( element && element["on" + type] ) { + // Pass along a fake event + data.shift( jQuery.event.fix({ type: type, target: element }) ); + + // Trigger the event element["on" + type].apply( element, data ); + + // Handle a global trigger + } else if ( !element ) { + var g = jQuery.event.global[type]; + if ( g ) + for ( var i = 0; i < g.length; i++ ) + jQuery.event.trigger( type, data, g[i] ); + } }, handle: function(event) {