From: Scott González Date: Thu, 31 Jan 2013 22:20:19 +0000 (-0500) Subject: Dialog: Set the _isOpen flag immediately in open(). Fixes #8958 - Dialog: Double... X-Git-Tag: 1.10.1~26 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=62cda1f95d0e7040153f0b5fe5745d199a0a094e;p=jquery-ui.git Dialog: Set the _isOpen flag immediately in open(). Fixes #8958 - Dialog: Double ui-widget-overlay when opening modal dialog triggers an event opening same dialog. --- diff --git a/tests/unit/dialog/dialog_methods.js b/tests/unit/dialog/dialog_methods.js index 2c3495ca2..6de185513 100644 --- a/tests/unit/dialog/dialog_methods.js +++ b/tests/unit/dialog/dialog_methods.js @@ -193,6 +193,35 @@ test("#6137: dialog('open') causes form elements to reset on IE7", function() { d1.remove(); }); +asyncTest( "#8958: dialog can be opened while opening", function() { + expect( 1 ); + + var element = $( "
" ).dialog({ + autoOpen: false, + modal: true, + open: function() { + equal( $( ".ui-widget-overlay" ).length, 1 ); + start(); + } + }); + + $( "#favorite-animal" ) + // We focus the input to start the test. Once it receives focus, the + // dialog will open. Opening the dialog, will cause an element inside + // the dialog to gain focus, thus blurring the input. + .bind( "focus", function() { + element.dialog( "open" ); + }) + // When the input blurs, the dialog is in the process of opening. We + // try to open the dialog again, to make sure that dialogs properly + // handle a call to the open() method during the process of the dialog + // being opened. + .bind( "blur", function() { + element.dialog( "open" ); + }) + .focus(); +}); + test("#5531: dialog width should be at least minWidth on creation", function () { expect( 4 ); var element = $("
").dialog({ diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js index 77bf68dd1..b6ac7aed7 100644 --- a/ui/jquery.ui.dialog.js +++ b/ui/jquery.ui.dialog.js @@ -215,6 +215,7 @@ $.widget( "ui.dialog", { return; } + this._isOpen = true; this.opener = $( this.document[0].activeElement ); this._size(); @@ -226,7 +227,6 @@ $.widget( "ui.dialog", { that._trigger("focus"); }); - this._isOpen = true; this._trigger("open"); },