Tests (Simulate): Make the blur event async to deal with IE's native blur being async.

(cherry picked from commit 183d6a00df)
This commit is contained in:
Scott González 2011-11-01 16:35:49 -04:00
parent 069c645403
commit aa9ca2ba84

View File

@ -194,11 +194,15 @@ $.extend( $.simulate.prototype, {
element.bind( "blur", trigger ); element.bind( "blur", trigger );
element[ 0 ].blur(); element[ 0 ].blur();
// Some versions of IE don't actually .blur() on an element - so we focus the body // blur events are async in IE
setTimeout(function() {
// IE won't let the blur occur if the window is inactive
if ( element[ 0 ].ownerDocument.activeElement === element[ 0 ] ) { if ( element[ 0 ].ownerDocument.activeElement === element[ 0 ] ) {
element[ 0 ].ownerDocument.body.focus(); element[ 0 ].ownerDocument.body.focus();
} }
// Firefox won't trigger events if the window is inactive
// IE doesn't trigger events if we had to manually focus the body
if ( !triggered ) { if ( !triggered ) {
focusoutEvent = $.Event( "focusout" ); focusoutEvent = $.Event( "focusout" );
focusoutEvent.preventDefault(); focusoutEvent.preventDefault();
@ -206,6 +210,7 @@ $.extend( $.simulate.prototype, {
element.triggerHandler( "blur" ); element.triggerHandler( "blur" );
} }
element.unbind( "blur", trigger ); element.unbind( "blur", trigger );
}, 1 );
} }
}); });