Make sure that we're doing proper focus bubble testing. Also simplified the logic for the IE focusin/focusout handling.

This commit is contained in:
John Resig 2009-12-06 18:02:58 -08:00
parent 19ad49e607
commit 542099a278
2 changed files with 15 additions and 24 deletions

View file

@ -674,36 +674,26 @@ function trigger( type, elem, args ) {
} }
// Create "bubbling" focus and blur events // Create "bubbling" focus and blur events
jQuery.each({ if ( !jQuery.support.focusBubbles ) {
focus: "focusin",
blur: "focusout"
}, function( orig, fix ){
var event = jQuery.event,
handle = event.handle;
function ieHandler() {
arguments[0].type = orig;
return handle.apply(this, arguments);
}
event.special[orig] = { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ){
setup:function() { event.special[ orig ] = {
if ( this.addEventListener ) { setup: function() {
this.addEventListener( orig, handle, true ); jQuery.event.add( this, fix, ieHandler );
} else {
event.add( this, fix, ieHandler );
}
}, },
teardown:function() { teardown: function() {
if ( this.removeEventListener ) { jQuery.event.remove( this, fix, ieHandler );
this.removeEventListener( orig, handle, true );
} else {
event.remove( this, fix, ieHandler );
}
} }
}; };
function ieHandler() {
arguments[0].type = orig;
return jQuery.event.handle.apply(this, arguments);
}
}); });
}
jQuery.fn.extend({ jQuery.fn.extend({
// TODO: make bind(), unbind() and one() DRY! // TODO: make bind(), unbind() and one() DRY!
bind: function( type, data, fn, thisObject ) { bind: function( type, data, fn, thisObject ) {

View file

@ -109,6 +109,7 @@
jQuery.support.submitBubbles = eventSupported("submit"); jQuery.support.submitBubbles = eventSupported("submit");
jQuery.support.changeBubbles = eventSupported("change"); jQuery.support.changeBubbles = eventSupported("change");
jQuery.support.focusBubbles = eventSupported("focus");
// release memory in IE // release memory in IE
root = script = div = all = a = null; root = script = div = all = a = null;