diff --git a/tests/unit/dialog/dialog_options.js b/tests/unit/dialog/dialog_options.js index 264c2fb6ee1..e581796da33 100644 --- a/tests/unit/dialog/dialog_options.js +++ b/tests/unit/dialog/dialog_options.js @@ -446,4 +446,36 @@ test("width", function() { el.remove(); }); +test("zIndex", function() { + expect(9); + + el = $('
').dialog( { autoOpen: false } ); + equals(dlg().css( 'zIndex' ), 1000, "default zIndex"); + el.dialog("open"); + equals(dlg().css( 'zIndex' ), $.ui.dialog.maxZ, "default zIndex"); + el.remove(); + + el = $('
').dialog(); + equals(dlg().css( 'zIndex' ), $.ui.dialog.maxZ, "default zIndex"); + el.remove(); + + // The z-index will be 1 higher than requested if 'moveToTop' gets called, such as when 'autoOpen' is true. + newZIndex = $.ui.dialog.maxZ + 2932; + el = $('
').dialog({zIndex: newZIndex }); + equals(dlg().css('zIndex'), newZIndex + 1, "explicit zIndex"); + equals( el.dialog( 'option', 'zIndex' ), newZIndex, 'get works for zIndex' ); + equals( newZIndex + 1, $.ui.dialog.maxZ, '$.ui.dialog.maxZ is updated to the new value' ); + + el.dialog('option', 'zIndex', 1748); + equals(dlg().css('zIndex'), 1748, 'explicit zIndex after init'); + equals( el.dialog( 'option', 'zIndex' ), 1748 ); + el.remove(); + + // At the moment, an explicit zIndex option lower than $.ui.dialog.maxZ will be ignored since 'open' calls + // 'moveToTop'. Is this the desired behavior? + el = $('
').dialog({zIndex: 1584 }); + equals(dlg().css('zIndex'), $.ui.dialog.maxZ, "explicit zIndex at instantiation below $.ui.dialog.maxZ is ignored"); + el.remove(); +}); + })(jQuery); diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js index 1f959a837b6..d47feb8d74d 100644 --- a/ui/jquery.ui.dialog.js +++ b/ui/jquery.ui.dialog.js @@ -605,6 +605,25 @@ $.widget("ui.dialog", { $( ".ui-dialog-title", self.uiDialogTitlebar ) .html( "" + ( value || " " ) ); break; + case "zIndex": + if ( value > $.ui.dialog.maxZ ) { + // Increment the 'maxZ' counters when this dialog is currently visible + if ( self.isOpen() ) { + $.ui.dialog.maxZ = value; + + if ( self.overlay ) { + $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ; + $.ui.dialog.maxZ += 1; + } + } + + value = $.ui.dialog.maxZ; + } + + self.overlay && self.overlay.$el.css( "z-index", value - 1 ); + uiDialog.css( "z-index", value ); + + break; } this._super( key, value );