X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fevent.js;h=d830c4d98e05a98fe79f491e6794578ec5049ef9;hb=88068f82c199847d3679b130664dd91cc2e89f00;hp=1bbf1348dd8fd54ba6d4ccb3614dc87a071db247;hpb=ff6ceadbfd470463e63708413eb5a55bd7e90c69;p=jquery.git diff --git a/src/event.js b/src/event.js index 1bbf134..d830c4d 100644 --- a/src/event.js +++ b/src/event.js @@ -7,7 +7,8 @@ var rnamespaces = /\.(.*)$/, rescape = /[^\w\s.|`]/g, fcleanup = function( nm ) { return nm.replace(rescape, "\\$&"); - }; + }, + focusCounts = { focusin: 0, focusout: 0 }; /* * A number of helper functions used for managing events. @@ -282,11 +283,11 @@ jQuery.event = { handle.elem = null; } - delete elemData[ eventKey ]; + delete elemData.events; delete elemData.handle; if ( typeof elemData === "function" ) { - jQuery.removeData( elem, "events" ); + jQuery.removeData( elem, eventKey ); } else if ( jQuery.isEmptyObject( elemData ) ) { jQuery.removeData( elem ); @@ -855,17 +856,21 @@ if ( document.addEventListener ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { jQuery.event.special[ fix ] = { setup: function() { - this.addEventListener( orig, handler, true ); + if ( focusCounts[fix]++ === 0 ) { + document.addEventListener( orig, handler, true ); + } }, teardown: function() { - this.removeEventListener( orig, handler, true ); + if ( --focusCounts[fix] === 0 ) { + document.removeEventListener( orig, handler, true ); + } } }; function handler( e ) { e = jQuery.event.fix( e ); e.type = fix; - return jQuery.event.handle.call( this, e ); + return jQuery.event.trigger( e, null, e.target ); } }); }