For people who need a truly modish dialogue, Roy J provides only a partial solution, since the focus is still in the dialogue. To fix this, you can copy dijit / Dialog.js and its dijit / templates / Dialog.html into your own folder structure and rename them to ModelessDialog. Then remove the focus handler, key handler, and lining. Here is the full result:
define([ "require", "dojo/_base/array", // array.forEach array.indexOf array.map "dojo/aspect", "dojo/_base/declare", // declare "dojo/Deferred", // Deferred "dojo/dom", // dom.isDescendant "dojo/dom-class", // domClass.add domClass.contains "dojo/dom-geometry", // domGeometry.position "dojo/dom-style", // domStyle.set "dojo/_base/fx", // fx.fadeIn fx.fadeOut "dojo/i18n", // i18n.getLocalization "dojo/keys", "dojo/_base/lang", // lang.mixin lang.hitch "dojo/on", "dojo/ready", "dojo/sniff", // has("ie") has("opera") has("dijit-legacy-requires") "dojo/window", // winUtils.getBox, winUtils.get "dojo/dnd/Moveable", // Moveable "dojo/dnd/TimedMoveable", // TimedMoveable "dijit/focus", "dijit/_base/manager", // manager.defaultDuration "dijit/_Widget", "dijit/_TemplatedMixin", "dijit/_CssStateMixin", "dijit/form/_FormMixin", "dijit/_DialogMixin", "dijit/layout/ContentPane", "dijit/layout/utils", "dojo/text!./templates/ModelessDialog.html", "dijit/a11yclick", // template uses ondijitclick "dojo/i18n!dijit/nls/common" ], function(require, array, aspect, declare, Deferred, dom, domClass, domGeometry, domStyle, fx, i18n, keys, lang, on, ready, has, winUtils, Moveable, TimedMoveable, focus, manager, _Widget, _TemplatedMixin, _CssStateMixin, _FormMixin, _DialogMixin, ContentPane, utils, template){ // module: // company/common/ModelessDialog var resolvedDeferred = new Deferred(), _DialogBase, ds = null, DialogLevelManager = null, ModelessDialog, _currentDialog = null; resolvedDeferred.resolve(true); _DialogBase = declare("dijit._DialogBase" + (has("dojo-bidi") ? "_NoBidi" : ""), [_TemplatedMixin, _FormMixin, _DialogMixin, _CssStateMixin], { templateString: template, baseClass: "dijitDialog", cssStateNodes: { closeButtonNode: "dijitDialogCloseIcon" }, // Map widget attributes to DOMNode attributes. _setTitleAttr: { node: "titleNode", type: "innerHTML" }, // open: [readonly] Boolean // True if ModelessDialog is currently displayed on screen. open: false, // duration: Integer // The time in milliseconds it takes the dialog to fade in and out duration: manager.defaultDuration, // refocus: Boolean // A Toggle to modify the default focus behavior of a ModelessDialog, which // is to re-focus the element which had focus before being opened. // False will disable refocusing. Default: true refocus: true, // autofocus: Boolean // A Toggle to modify the default focus behavior of a ModelessDialog, which // is to focus on the first dialog element after opening the dialog. // False will disable autofocusing. Default: true autofocus: true, // _firstFocusItem: [private readonly] DomNode // The pointer to the first focusable node in the dialog. // Set by `dijit/_DialogMixin._getFocusItems()`. _firstFocusItem: null, // _lastFocusItem: [private readonly] DomNode // The pointer to which node has focus prior to our dialog. // Set by `dijit/_DialogMixin._getFocusItems()`. _lastFocusItem: null, // draggable: Boolean // Toggles the movable aspect of the ModelessDialog. If true, ModelessDialog // can be dragged by it title. If false it will remain centered // in the viewport. draggable: true, _setDraggableAttr: function(/*Boolean*/ val){ // Avoid _WidgetBase behavior of copying draggable attribute to this.domNode, // as that prevents text select on modern browsers (