]> source.dussan.org Git - jquery.git/commitdiff
jQuery.event.handlers delegate matching hook point
authorRichard Gibson <richard.gibson@gmail.com>
Sun, 13 Jan 2013 18:11:43 +0000 (13:11 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Mon, 14 Jan 2013 00:20:22 +0000 (19:20 -0500)
src/event.js

index 6c3dc1b80d7a72dbae5f2a5bc526b6abf1b69fca..e4bc153f1f8901a420cf251e5187c1ff594748ff 100644 (file)
@@ -344,11 +344,10 @@ jQuery.event = {
                // Make a writable jQuery.Event from the native event object
                event = jQuery.event.fix( event );
 
-               var i, j, cur, ret, selMatch, matched, matches, handleObj, sel,
+               var i, j, ret, matched, handleObj,
                        handlerQueue = [],
                        args = core_slice.call( arguments ),
                        handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
-                       delegateCount = handlers.delegateCount,
                        special = jQuery.event.special[ event.type ] || {};
 
                // Use the fix-ed jQuery.Event rather than the (read-only) native event
@@ -361,40 +360,7 @@ jQuery.event = {
                }
 
                // Determine handlers that should run if there are delegated events
-               // Avoid non-left-click bubbling in Firefox (#3861)
-               if ( delegateCount && !(event.button && event.type === "click") ) {
-
-                       for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
-
-                               // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)
-                               if ( cur.disabled !== true || event.type !== "click" ) {
-                                       selMatch = {};
-                                       matches = [];
-                                       i = 0;
-                                       for ( ; i < delegateCount; i++ ) {
-                                               handleObj = handlers[ i ];
-                                               sel = handleObj.selector;
-
-                                               if ( selMatch[ sel ] === undefined ) {
-                                                       selMatch[ sel ] = handleObj.needsContext ?
-                                                               jQuery( sel, this ).index( cur ) >= 0 :
-                                                               jQuery.find( sel, this, null, [ cur ] ).length;
-                                               }
-                                               if ( selMatch[ sel ] ) {
-                                                       matches.push( handleObj );
-                                               }
-                                       }
-                                       if ( matches.length ) {
-                                               handlerQueue.push({ elem: cur, handlers: matches });
-                                       }
-                               }
-                       }
-               }
-
-               // Add the remaining (directly-bound) handlers
-               if ( handlers.length > delegateCount ) {
-                       handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
-               }
+               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
 
                // Run delegates first; they may want to stop propagation beneath us
                i = 0;
@@ -432,6 +398,49 @@ jQuery.event = {
                return event.result;
        },
 
+       handlers: function( event, handlers ) {
+               var i, cur, selMatch, matches, handleObj, sel,
+                       handlerQueue = [],
+                       delegateCount = handlers.delegateCount;
+
+               // Avoid non-left-click bubbling in Firefox (#3861)
+               if ( delegateCount && !(event.button && event.type === "click") ) {
+
+                       for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+
+                               // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)
+                               if ( cur.disabled !== true || event.type !== "click" ) {
+                                       selMatch = {};
+                                       matches = [];
+                                       i = 0;
+                                       for ( ; i < delegateCount; i++ ) {
+                                               handleObj = handlers[ i ];
+                                               sel = handleObj.selector;
+
+                                               if ( selMatch[ sel ] === undefined ) {
+                                                       selMatch[ sel ] = handleObj.needsContext ?
+                                                               jQuery( sel, this ).index( cur ) >= 0 :
+                                                               jQuery.find( sel, this, null, [ cur ] ).length;
+                                               }
+                                               if ( selMatch[ sel ] ) {
+                                                       matches.push( handleObj );
+                                               }
+                                       }
+                                       if ( matches.length ) {
+                                               handlerQueue.push({ elem: cur, handlers: matches });
+                                       }
+                               }
+                       }
+               }
+
+               // Add the remaining (directly-bound) handlers
+               if ( handlers.length > delegateCount ) {
+                       handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+               }
+
+               return handlerQueue;
+       },
+
        fix: function( event ) {
                if ( event[ jQuery.expando ] ) {
                        return event;