mirror of
https://github.com/jquery/jquery.git
synced 2026-02-12 20:55:06 -05:00
Stop trying to emulate the focus/blur event in IE, doesn't work as one might expect, anyway. Instead, implement the focusin/focusout events in all other browsers - which creates a much better parity across all browsers. Uses event capturing instead of bubbling to make it happen. Thanks to Alexander for the recommendation and to Joern Zaefferer for the original focus/blur delegation code.
This commit is contained in:
31
src/event.js
31
src/event.js
@@ -720,24 +720,23 @@ function trigger( type, elem, args ) {
|
||||
}
|
||||
|
||||
// Create "bubbling" focus and blur events
|
||||
if ( !jQuery.support.focusBubbles ) {
|
||||
if ( document.addEventListener ) {
|
||||
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ){
|
||||
jQuery.event.special[ fix ] = {
|
||||
setup: function() {
|
||||
this.addEventListener( orig, handler, true );
|
||||
},
|
||||
teardown: function() {
|
||||
this.removeEventListener( orig, handler, true );
|
||||
}
|
||||
};
|
||||
|
||||
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ){
|
||||
jQuery.event.special[ orig ] = {
|
||||
setup: function() {
|
||||
jQuery.event.add( this, fix, ieHandler );
|
||||
},
|
||||
teardown: function() {
|
||||
jQuery.event.remove( this, fix, ieHandler );
|
||||
function handler( e ) {
|
||||
e = jQuery.event.fix( e );
|
||||
e.type = fix;
|
||||
return jQuery.event.handle.call( this, e );
|
||||
}
|
||||
};
|
||||
|
||||
function ieHandler() {
|
||||
arguments[0].type = orig;
|
||||
return jQuery.event.handle.apply(this, arguments);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
jQuery.each(["bind", "one"], function(i, name) {
|
||||
|
||||
Reference in New Issue
Block a user