打开对话框后,JQuery对话框的条件调整大小为内容高度
Conditional resizing of JQuery dialog to content height after opening the dialog
早上大部分时间我都在看SO,但没有发现任何帮助。
目标
我试图在JQuery对话框中复制maxHeight选项的行为。此选项仅在调整对话框大小后适用,我希望此属性在打开对话框时应用,而不是在调整大小时应用。
除非发布新版本的补丁,否则我能做的最好的事情就是变通。
我的项目信息
C#中的ASP.NET 3.5
详细信息
我必须打开一个包含gridview的对话框(在对话框使用的div中),在该对话框中,正常使用可以显示从1或2行到几十行的任何内容。
-
我在SO上找到了一个解决方案,它意味着在我的div上设置"最大高度"属性,但调整对话框的大小有一个奇怪的效果,我正试图摆脱它:
-
如果内容足够小(通常是几行的列表),则对话框很小,可以调整到更大的大小。asp:gridview不会移动,使对话框变大只会在其下方和右侧添加空白。
-
但是,一旦你再次拖动窗口边缘使其变小,白色区域就会保持不变,向上滑动并减少网格视图区域,最终将其缩小为零。
-
将gridview设置为100%可以解决这个问题,但如果只用几行将窗口变大,每条线就会有几十个像素高。
-
所以我决定用一个不可调整大小的对话框来固定高度,这样就不会有任何东西以不应该的方式移动,但小的内容会在下面用空白填充,我们希望窗口可以调整。
最后,我决定尝试将对话框打开到固定的高度,然后调整其大小以适应我的内容如果同一函数中的内容div小于500px高。
我的代码不起作用,我不知道如何实现它,甚至不知道它是否可行。
这是我的JS:
function ShowReferedTasks(title, s) {
// On affiche la div qui constitue le popup dialog
document.getElementById('litReferedTasks').style.display = '';
//On crée le dialog à partir de la même div
$('#litReferedTasks').dialog({
autoOpen: true,
modal: true,
resizable: true,
show: 'drop',
hide: 'drop',
width: 800,
minHeight: 0,
height: 500,
title: 'Tâche' + s + ' référée' + s + ' de ' + title
});
/*option 1 (used):*/ var heightDiv = document.getElementById('litReferedTasks').style.height;
/*option 2:*/ //var heightDiv = $(this).height($('#litReferedTasks').height());
if (heightDiv < 500)
{
$('#litReferedTasks').dialog('option', 'height', heightDiv);
/*alternative I tried*/ //$("#dialog").dialog('option', 'height', heightDiv);
}
}
这是我的div:
<div id="litReferedTasks" style="background-color: White; display: none; height:95%;">
<asp:GridView ID="gvReferedTasks" runat="server" OnRowDataBound="gvReferedTasks_RowDataBound" Width="97.5%" Visible="false">
</asp:GridView>
<asp:Label ID="lblNoReferedTasks" runat="server" Visible="false" Width="100%"></asp:Label>
</div>
正如你所看到的,我希望我的函数打开对话框,然后确定包含网格视图的div的大小,如果大小低于500像素,我希望对话框的高度调整到网格视图,否则对于大的内容,我只会用滚动条将其保持在500像素高。
谢谢你在这方面的帮助。
更新2:
下面的代码是有效的,但如果关闭我的对话框并重新打开它,那么在大的内容上调整大小就会失败。知道为什么吗?基本上它只工作一次,直到我刷新页面并刷新缓存(Ctrl+F5)
更新1:
我使用了js脚本和@Paul Graffam给我的东西的组合:
将div设置为inline-block
似乎奏效了,但js完成了大部分工作:
function ShowReferedTasks(title, s) {
//On crée le dialog à partir de la même div
$('#litReferedTasks').dialog({
autoOpen: true,
modal: true,
resizable: true,
show: 'drop',
hide: 'drop',
width: 800,
minHeight: 0,
open: function(event, ui) {
$(this).css({ 'overflow-y': 'auto' });
},
title: 'Tâche' + s + ' référée' + s + ' de ' + title
});
// Resizes the dialog to fit the content up to 500px, after which it overflows automatically.
var heightDiv = $('#litReferedTasks').height();
if (heightDiv > 450) $('#litReferedTasks').dialog('option', 'height', 500);
}
div然后填充整个对话框,当它变得比它大时就会溢出。打开对话框一开始是为了适应div,无论它有多大,但随后会查看div的大小,如果大于500像素,则会将对话框的大小调整为500像素。
看起来它成功地完成了我想要的操作,没有在div上使用max-height
带来的大小调整限制和问题。
我找到的一个简单的方法是将对话div的css设置为max-height
设置为500px,然后可以删除对话框中的高度设置。这样,任何超过500px的东西都将被设置为溢出,而任何小于500px的都将自动调整大小,因为高度现在默认为auto。
由于gridview使用表,我认为将div的显示设置为display: inline-block;
并删除将显示设置为空的行是很重要的。
我在这里用您的一些代码设置了一个示例:http://jsfiddle.net/rrAJM/1/
此外,我注意到您一直在使用document.getElementById
,但由于您使用的是jQuery,因此没有必要这样做。相反,您可以通过以下操作选择元素:$('#litReferedTasks')
例如,document.getElementById('litReferedTasks').style.height;
变成$('#litReferedTasks').height();
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 在输入字段中将最小金额设置为
- 如果宽度是百分比,如何设置以px为单位的图像高度
- 通过jquery设置最小高度
- 将“潜水高度”设置为“另一潜水高度”
- Grunt-将多个文件最小化/处理为一个文件
- 为img设置高度和宽度
- 如何将高度动画设置为自动
- 如何将此脚本更改为最小高度(或固定高度)
- 替换后将动画设置为高度0
- Image.onload 函数为高度和宽度返回零
- 将弹出窗口的大小调整为最小高度和宽度,然后拖动到以下大小应该是不可能的
- 我如何才能将这个响应性的html5视频标题重写到更小的高度
- 根据最小和高度值拟合框中的图像
- 当滑块调整到较小的高度时,滑块后的内容不会向上移动
- 在cytoscape.js中获得最小图形高度
- 如何在第一个页面加载时设置最小高度/宽度为屏幕高度/宽度
- 如果highcharts.js中没有数据,则为图表容器设置最小高度
- 如何使用D3为堆积条形图中的条形图指定最小高度
- 将jquery转换为mootools的小脚本,平衡高度