From 511c9fe763bac171bb6ac3ac0a77c425da8b3112 Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Mon, 10 Oct 2011 23:14:08 -0400 Subject: [PATCH] Fix focus/blur unit test issues. Reopens #6705. In the event refactor, I tried to have the focus/blur events trigger the focus/blur plus focusin/focusout events but this doesn't handle various real-world cases that expect a trigger()ed jQuery handler to run and be able to pass data even if the native event shouldn't fire. This reopens a bug that causes a double-fire of inline event handlers. --- src/event.js | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/event.js b/src/event.js index 0160be07f..875f014d7 100644 --- a/src/event.js +++ b/src/event.js @@ -27,14 +27,6 @@ var rnamespaces = /\.(.*)$/, (!m[3] || m[3].test( elem.className )) && (!m[4] || elem.getAttribute( m[4] ) == m[5]) ); - }, - useNativeMethod = function( event ) { - // IE throws error on focus/blur of a hidden element (#1486) - var type = event.type; - if ( !event.isDefaultPrevented() && this[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) ) { - this[ type ](); - return false; - } }; /* @@ -102,7 +94,6 @@ jQuery.event = { special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers - // will be the result of merging handleObjIn handleObj = jQuery.extend({ type: type, origType: tns[1], @@ -357,7 +348,7 @@ jQuery.event = { eventPath = []; addHandlers( elem, special.bindType || type ); doc = elem.ownerDocument; - if ( doc && !jQuery.isWindow( elem ) & !event.isPropagationStopped() ) { + if ( doc && !special.noBubble && !jQuery.isWindow( elem ) & !event.isPropagationStopped() ) { bubbleType = special.delegateType || type; for ( cur = elem.parentNode; cur; cur = cur.parentNode ) { addHandlers( cur, bubbleType ); @@ -426,7 +417,7 @@ jQuery.event = { // Determine handlers that should run if there are delegated events // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861) - if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) { + if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) { for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { selMatch = {}; @@ -566,11 +557,11 @@ jQuery.event = { focus: { delegateType: "focusin", - trigger: useNativeMethod + noBubble: true }, blur: { delegateType: "focusout", - trigger: useNativeMethod + noBubble: true }, beforeunload: { -- 2.39.5