Make sure that focusin/focusout bubbles in non-IE browsers.
This commit is contained in:
parent
39addc87a3
commit
88068f82c1
2 changed files with 24 additions and 5 deletions
13
src/event.js
13
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.
|
||||
|
@ -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 );
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue