X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fevent.js;h=17d7673ee02ce6fb17cabaff5be59d179fe1a0a8;hb=726fda08bea7bbd72d73be4563aba855c63966fe;hp=2e510eabf2e6ff2dd3bd579c5cf12e0daf21d7c1;hpb=35c379075c9feaa7cf82b4cf4c50a790e35b4d5f;p=jquery.git diff --git a/src/event.js b/src/event.js index 2e510ea..17d7673 100644 --- a/src/event.js +++ b/src/event.js @@ -221,7 +221,7 @@ jQuery.event = { } // remove generic event handler if no more handlers exist - if ( jQuery.isEmptyObject( events[ type ] ) ) { + if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { removeEvent( elem, type, elemData.handle ); } @@ -917,9 +917,16 @@ jQuery.fn.extend({ } }); +var liveMap = { + focus: "focusin", + blur: "focusout", + mouseenter: "mouseover", + mouseleave: "mouseout" +}; + jQuery.each(["live", "die"], function( i, name ) { jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { - var type, i = 0, match, namespaces, + var type, i = 0, match, namespaces, preType, selector = origSelector || this.selector, context = origSelector ? this : jQuery( this.context ); @@ -939,18 +946,19 @@ jQuery.each(["live", "die"], function( i, name ) { type = type.replace( rnamespaces, "" ); } - type = type === "focus" ? "focusin" : // focus --> focusin - type === "blur" ? "focusout" : // blur --> focusout - type === "hover" ? types.push("mouseleave" + namespaces) && "mouseenter" : // hover support - type; + if ( type === "hover" ) { + types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); + continue; + } - type += namespaces; + preType = type; + type = (liveMap[ type ] || type) + namespaces; 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 } ); + { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); }); } else { @@ -969,7 +977,7 @@ function liveHandler( event ) { events = jQuery.data( this, "events" ); // Make sure we avoid non-left-click bubbling in Firefox (#3861) - if ( event.liveFired === this || !events || event.button && event.type === "click" ) { + if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { return; } @@ -999,7 +1007,7 @@ function liveHandler( event ) { related = null; // Those two events require additional checking - if ( handleObj.origType === "mouseenter" || handleObj.origType === "mouseleave" ) { + if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; }