Skip to content
Permalink
Browse files

Dialog: Prevent dialog form losing focus (or move it back in IE <= 8).

  • Loading branch information...
jzaefferer committed Oct 23, 2012
1 parent 3829a37 commit 2a2a2c017c4395799ec07666f4ca14e078b52b5b
Showing with 22 additions and 3 deletions.
  1. +1 −1 tests/visual/dialog/complex-dialogs.html
  2. +21 −2 ui/jquery.ui.dialog.js
@@ -30,7 +30,7 @@
var datepickerDialog = $( "#dialog-datepicker" ).dialog({
autoOpen: false,
modal: true,
modal: true
}),
autocompleteDialog = $( "#dialog-autocomplete" ).dialog({
@@ -256,8 +256,6 @@ $.widget("ui.dialog", {
this.uiDialog.hide();
this._trigger( "close", event );
}

return this;
},

isOpen: function() {
@@ -305,6 +303,23 @@ $.widget("ui.dialog", {
return this;
},

_keepFocus: function( event ) {
function checkFocus() {
var activeElement = this.document[ 0 ].activeElement,
isActive = this.uiDialog[ 0 ] === activeElement ||
$.contains( this.uiDialog[ 0 ], activeElement );
if ( !isActive ) {
this.uiDialog.focus();
}
}
event.preventDefault();
checkFocus.call( this );
// support: IE
// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
// so we check again later
this._delay( checkFocus );
},

_createButtons: function( buttons ) {
var that = this,
hasButtons = false;
@@ -648,6 +663,10 @@ $.extend( $.ui.dialog.overlay, {

$el.appendTo( document.body );

$el.bind( "mousedown", function( event ) {
dialog._keepFocus( event );
});

if ( $.fn.bgiframe ) {
$el.bgiframe();
}

0 comments on commit 2a2a2c0

Please sign in to comment.
You can’t perform that action at this time.