From aa9ca2ba84cbc78f77e47eeef91747cf22b14824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Tue, 1 Nov 2011 16:35:49 -0400 Subject: [PATCH] Tests (Simulate): Make the blur event async to deal with IE's native blur being async. (cherry picked from commit 183d6a00df531b13c638944796b5bc52ca19ecb4) --- tests/jquery.simulate.js | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/tests/jquery.simulate.js b/tests/jquery.simulate.js index c1d28f982..adc340049 100644 --- a/tests/jquery.simulate.js +++ b/tests/jquery.simulate.js @@ -194,18 +194,23 @@ $.extend( $.simulate.prototype, { element.bind( "blur", trigger ); element[ 0 ].blur(); - // Some versions of IE don't actually .blur() on an element - so we focus the body - if ( element[ 0 ].ownerDocument.activeElement === element[ 0 ] ) { - element[ 0 ].ownerDocument.body.focus(); - } + // 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 ] ) { + element[ 0 ].ownerDocument.body.focus(); + } - if ( !triggered ) { - focusoutEvent = $.Event( "focusout" ); - focusoutEvent.preventDefault(); - element.trigger( focusoutEvent ); - element.triggerHandler( "blur" ); - } - element.unbind( "blur", trigger ); + // 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 ) { + focusoutEvent = $.Event( "focusout" ); + focusoutEvent.preventDefault(); + element.trigger( focusoutEvent ); + element.triggerHandler( "blur" ); + } + element.unbind( "blur", trigger ); + }, 1 ); } });