Search and Top Navigation
#8359 closed enhancement (wontfix)
Opened May 29, 2012 02:51PM UTC
Closed May 29, 2012 03:12PM UTC
Add "beforeOpen" event to Dialog
| Reported by: | BenVercammen | Owned by: | |
|---|---|---|---|
| Priority: | minor | Milestone: | 1.9.0 |
| Component: | ui.dialog | Version: | 1.8.20 |
| Keywords: | Cc: | ||
| Blocked by: | Blocking: |
Description
I would like to have a "beforeOpen" event for the Dialog class. I've already patched jquery.ui.dialog.js like this:
open: function() {
if (this._isOpen) { return; }
var self = this,
options = self.options,
uiDialog = self.uiDialog;
+ if (false === self._trigger('beforeOpen')) {
+ return;
+ }
+
self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;
self._size();
self._position(options.position);
uiDialog.show(options.show);
self.moveToTop(true);
I need this event for the following situation:
- when opening/closing a Dialog, the "focus" is reset (to adapt to the new elements being visible/hidden)
- this means that you lose focus after closing a dialog and have to start "tabbing" again to get to the point where you left
With my current solution being:
- use the "beforeOpen" event to attach the current ":focus" element to the dialog (via .prop())
- use the "close" event to set focus again
/**
* @param id The id of the dialog element
*/
function bindDialogFocusEvents(id) {
$('#'+id).bind('dialogclose', function(event) {
$(this).prop('focused').focus();
});
$('#'+id).bind('dialogbeforeopen', function(event) {
var target = $(':focus');
$(this).prop('focused', target);
});
}
$("#new-dialog").dialog({modal: true, ...});
bindDialogFocusEvents('new-dialog');
Maybe it's possible to add the "focus restoration" functionality to the dialog code as well, but I would be happy with just the "beforeOpen" event for now...
Attachments (0)
Change History (1)
Changed May 29, 2012 03:12PM UTC by comment:1
| resolution: | → wontfix |
|---|---|
| status: | new → closed |
This just needs to be built-in behavior. The only tricky part is figuring out what to do when non-modal dialogs close and the user has interacted with other elements after opening the dialog. This should be addressed in the API redesign, but feel free to create a new ticket for this right now if you want to.