aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJörn Zaefferer <joern.zaefferer@gmail.com>2012-10-22 20:33:15 -0400
committerJörn Zaefferer <joern.zaefferer@gmail.com>2012-10-24 16:57:13 -0400
commit2a2a2c017c4395799ec07666f4ca14e078b52b5b (patch)
tree1ab26fecd080e12df192e72feacb29460c75fc76
parent3829a37ca122e923c3a08b964c4b1a946a2a1456 (diff)
downloadjquery-ui-2a2a2c017c4395799ec07666f4ca14e078b52b5b.tar.gz
jquery-ui-2a2a2c017c4395799ec07666f4ca14e078b52b5b.zip
Dialog: Prevent dialog form losing focus (or move it back in IE <= 8).
-rw-r--r--tests/visual/dialog/complex-dialogs.html2
-rw-r--r--ui/jquery.ui.dialog.js23
2 files changed, 22 insertions, 3 deletions
diff --git a/tests/visual/dialog/complex-dialogs.html b/tests/visual/dialog/complex-dialogs.html
index 556336d00..634bfb3d6 100644
--- a/tests/visual/dialog/complex-dialogs.html
+++ b/tests/visual/dialog/complex-dialogs.html
@@ -30,7 +30,7 @@
var datepickerDialog = $( "#dialog-datepicker" ).dialog({
autoOpen: false,
- modal: true,
+ modal: true
}),
autocompleteDialog = $( "#dialog-autocomplete" ).dialog({
diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js
index 93a49cfd6..2b9846b3a 100644
--- a/ui/jquery.ui.dialog.js
+++ b/ui/jquery.ui.dialog.js
@@ -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();
}