No need to do the closest match if no selectors are passed in.
authorjeresig <jeresig@gmail.com>
Thu, 3 Dec 2009 15:51:04 +0000 (10:51 -0500)
committerjeresig <jeresig@gmail.com>
Thu, 3 Dec 2009 15:51:04 +0000 (10:51 -0500)
src/event.js
src/traversing.js

index 2bb8a0e..24e5ef1 100644 (file)
@@ -749,13 +749,30 @@ jQuery.fn.extend({
 });
 
 function liveHandler( event ) {
-       var stop = true, elems = [], args = arguments;
+       var stop = true, elems = [], selectors = [], args = arguments,
+               related, match, fn, elem, j, i,
+               live = jQuery.extend({}, jQuery.data( this, "events" ).live);
 
-       jQuery.each( jQuery.data( this, "events" ).live || [], function( i, fn ) {
-               if ( fn.live === event.type ) {
-                       var elem = jQuery( event.target ).closest( fn.selector, event.currentTarget )[0],
-                               related;
-                       if ( elem ) {
+       for ( j in live ) {
+               if ( live[j].live === event.type ) {
+                       selectors.push( live[j].selector );
+               }
+       }
+
+       console.log( event.type, selectors+"" );
+
+       // TODO: Make sure that duplicate selectors aren't run
+       match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+       console.log( "match", match, selectors+"" );
+
+       for ( i = 0, l = match.length; i < l; i++ ) {
+               for ( j in live ) {
+                       fn = live[j];
+                       elem = match[i].elem;
+                       related = null;
+
+                       if ( match[i].selector === fn.selector) {
                                // Those two events require additional checking
                                if ( fn.live === "mouseenter" || fn.live === "mouseleave" ) {
                                        related = jQuery( event.relatedTarget ).closest( fn.selector )[0];
@@ -766,19 +783,19 @@ function liveHandler( event ) {
                                }
                        }
                }
-       });
+       }
 
-       elems.sort(function( a, b ) {
-               return a.closer - b.closer;
-       });
+       console.log( "elems", elems );
 
-       jQuery.each(elems, function() {
-               event.currentTarget = this.elem;
-               event.data = this.fn.data;
-               if ( this.fn.apply( this.elem, args ) === false ) {
-                       return (stop = false);
+       for ( i = 0, l = elems.length; i < l; i++ ) {
+               match = elems[i];
+               event.currentTarget = match.elem;
+               event.data = match.fn.data;
+               if ( match.fn.apply( match.elem, args ) === false ) {
+                       stop = false;
+                       break;
                }
-       });
+       }
 
        return stop;
 }
index 737efa4..796ae2f 100644 (file)
@@ -58,7 +58,7 @@ jQuery.fn.extend({
                if ( jQuery.isArray( selectors ) ) {
                        var ret = [], cur = this[0], selector;
 
-                       if ( cur ) {
+                       if ( cur && selectors.length ) {
                                for ( var i = 0, l = selectors.length; i < l; i++ ) {
                                        selectors[i] = jQuery.expr.match.POS.test( selector ) ? 
                                                jQuery( selector, context || this.context ) :