aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJörn Zaefferer <joern.zaefferer@gmail.com>2012-10-23 10:31:10 -0400
committerJörn Zaefferer <joern.zaefferer@gmail.com>2012-10-24 17:02:32 -0400
commit14691ae6feea2732ec5aeae57b4275aa0e4d1beb (patch)
treec98e38f2caef68070bb52975a472229f9e973002
parent2a2a2c017c4395799ec07666f4ca14e078b52b5b (diff)
downloadjquery-ui-14691ae6feea2732ec5aeae57b4275aa0e4d1beb.tar.gz
jquery-ui-14691ae6feea2732ec5aeae57b4275aa0e4d1beb.zip
Dialog: Save the active element that opened the dialog and restore focus to that. Fixes #8730 - Dialog: Restore focus to opener.
-rw-r--r--tests/visual/dialog/complex-dialogs.html18
-rw-r--r--ui/jquery.ui.dialog.js9
2 files changed, 21 insertions, 6 deletions
diff --git a/tests/visual/dialog/complex-dialogs.html b/tests/visual/dialog/complex-dialogs.html
index 634bfb3d6..264787185 100644
--- a/tests/visual/dialog/complex-dialogs.html
+++ b/tests/visual/dialog/complex-dialogs.html
@@ -22,13 +22,13 @@
<script>
$(function() {
- $( "#dialog" ).dialog({
- modal: true,
- height: 300,
- width: 500
- });
+ var dialog = $( "#dialog" ).dialog({
+ modal: true,
+ height: 300,
+ width: 500
+ }),
- var datepickerDialog = $( "#dialog-datepicker" ).dialog({
+ datepickerDialog = $( "#dialog-datepicker" ).dialog({
autoOpen: false,
modal: true
}),
@@ -39,6 +39,10 @@
width: 600
});
+ $( "#open-dialog" ).click(function() {
+ dialog.dialog( "open" );
+ });
+
$( "#open-datepicker" ).click(function() {
datepickerDialog.dialog( "open" );
});
@@ -70,6 +74,8 @@
<a href="#">Outside link</a>
+<button id="open-dialog">Reopen dialog</button>
+
<div id="dialog" title="Basic dialog">
<p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
<p><button id="open-datepicker">Open another window with a datepicker.</button></p>
diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js
index 2b9846b3a..6617c344e 100644
--- a/ui/jquery.ui.dialog.js
+++ b/ui/jquery.ui.dialog.js
@@ -248,6 +248,13 @@ $.widget("ui.dialog", {
this.overlay.destroy();
}
+ if ( !this.opener.filter( ":focusable" ).focus().length ) {
+ // Hiding a focused element doesn't trigger blur in WebKit
+ // so in case we have nothing to focus on, explicitly blur the active element
+ // https://bugs.webkit.org/show_bug.cgi?id=47182
+ $( this.document[ 0 ].activeElement ).blur();
+ }
+
if ( this.options.hide ) {
this._hide( this.uiDialog, this.options.hide, function() {
that._trigger( "close", event );
@@ -278,6 +285,8 @@ $.widget("ui.dialog", {
options = this.options,
uiDialog = this.uiDialog;
+ this.opener = $( this.document[ 0 ].activeElement );
+
this._size();
this._position( options.position );
uiDialog.show( options.show );