From 66e9a6f77365fb4f682164cf1df5283fccf322d1 Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Tue, 16 Aug 2011 20:26:14 -0400 Subject: [PATCH] Make a `blur` event bubble properly when mutated into a `focusout` event. --- src/event.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/event.js b/src/event.js index 81a66c37f..dd2a817fa 100644 --- a/src/event.js +++ b/src/event.js @@ -96,8 +96,13 @@ jQuery.event = { tns = rtypenamespace.exec( types[t] ) || []; type = tns[1]; namespaces = (tns[2] || "").split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; type = (selector? special.delegateType : special.bindType ) || type; + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers handleObj = jQuery.extend({ type: type, origType: tns[1], @@ -108,9 +113,8 @@ jQuery.event = { namespace: namespaces.join(".") }, handleObjIn); - // Delegated event setup + // Delegated event; pre-analyze selector so it's processed quickly on event dispatch if ( selector ) { - // Pre-analyze selector so we can process it quickly on event dispatch handleObj.quick = quickParse( selector ); if ( !handleObj.quick && jQuery.expr.match.POS.test( selector ) ) { handleObj.isPositional = true; @@ -890,7 +894,10 @@ if ( !jQuery.support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0; + var attaches = 0, + handler = function( event ) { + simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; jQuery.event.special[ fix ] = { setup: function() { @@ -904,10 +911,6 @@ if ( !jQuery.support.focusinBubbles ) { } } }; - - function handler( event ) { - simulate( fix, event.target, jQuery.event.fix( event ), true ); - } }); } -- 2.39.5