使JQuery UI对话框自动增长或缩小以适应其内容

我有一个JQuery UI对话框popup窗口显示。 通过select表单上的某些选项,新的选项将出现在表单中,使其变长。 这可能会导致主页面有一个滚动条,而JQuery UI对话框有一个滚动条。 这个双滚动条的情况对于用户而言是难看的和混乱的。

我怎样才能使JQuery UI对话框增长(可能缩小),始终适合其内容,而不显示滚动条? 我宁愿只有主页上的滚动条是可见的。

更新:从jQuery UI 1.8开始,工作解决scheme(如第二个注释中提到的)将使用:

width: 'auto' 

使用autoResize:true选项。 我会说明:

  <div id="whatup"> <div id="inside">Hi there.</div> </div> <script> $('#whatup').dialog( "resize", "auto" ); $('#whatup').dialog(); setTimeout(function() { $('#inside').append("Hello!<br>"); setTimeout(arguments.callee, 1000); }, 1000); </script> 

这是一个工作示例: http : //jsbin.com/ubowa

答案是设置

 autoResize:true 

属性创build对话框时。 为了这个工作,你不能为对话框设置任何高度。 因此,如果在其创build者方法中或通过任何样式为对话框设置固定的像素高度,则autoResize属性将不起作用。

这适用于jQuery UI v1.10.3

 $("selector").dialog({height:'auto', width:'auto'}); 

我使用了下面的属性,它适合我:

 $('#selector').dialog({ minHeight: 'auto' }); 

自动支持高度。

宽度不是!

要做某种自动获得您显示的div的大小,然后设置窗口。

在C#代码中

 TheDiv.Style["width"] = "200px"; private void setWindowSize(int width, int height) { string widthScript = "$('.dialogDiv').dialog('option', 'width', " + width +");"; string heightScript = "$('.dialogDiv').dialog('option', 'height', " + height + ");"; ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "scriptDOWINDOWSIZE", "<script type='text/javascript'>" + widthScript + heightScript + "</script>", false); } 
 var w = $('#dialogText').text().length; $("#dialog").dialog('option', 'width', (w * 10)); 

做了我需要做的调整对话框的宽度。

如果你需要它在IE7中工作,你不能使用未公开的,错误的和不受支持的 {'width':'auto'}选项。 相反,将以下内容添加到.dialog()

 'open': function(){ $(this).dialog('option', 'width', this.scrollWidth) } 

.scrollWidth是否包含右侧填充取决于浏览器(Firefox不同于Chrome),因此您可以向.scrollWidth添加一个主观的“足够好”的像素.scrollWidth ,或者用您自己的宽度计算函数replace它。

你可能想在你的.dialog()选项中包含width: 0 ,因为这个方法永远不会减小宽度,只会增加宽度。

经testing可在IE7,IE8,IE9,IE10,IE11,Firefox 30,Chrome 35和Opera 22上运行。