]> source.dussan.org Git - jquery.git/commitdiff
Fix focus/blur unit test issues. Reopens #6705.
authorDave Methvin <dave.methvin@gmail.com>
Tue, 11 Oct 2011 03:14:08 +0000 (23:14 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Tue, 11 Oct 2011 03:14:08 +0000 (23:14 -0400)
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

index 0160be07fc7aeb2b91a45710d2d52fb90b32fbcf..875f014d7cdf3dc1b0d0f331e0be31010be2c4a8 100644 (file)
@@ -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: {