我有一个大约 40 列的 jqGrid treegrid,所以有一个大的水平滚动条(取决于浏览器的大小)。问题是由于宽度太大,当页面加载或我进行过滤等时,您看不到弹出“正在加载消息......” 因为它在屏幕的右侧。
有没有办法让“加载数据..” 当前可见屏幕中的消息中心(而不是整个页面?
我觉得你的问题很好。jqGrid 的其他用户也可能遇到同样的问题。
我个人更喜欢使用loadui: 'block'
在网格加载期间显示覆盖整个网格的设置。在这种情况下,问题将不那么重要。
如果您更改“正在加载...” div 内部的位置,您可以获得更好的结果loadBeforeSend
:
loadBeforeSend: function () {
var $loadingDiv = $("#load_"+$.jgrid.jqID(this.id)),
$bdiv = $(this).closest('.ui-jqgrid-bdiv');
$loadingDiv.show().css({
top: (Math.min($bdiv.height(), $(window).height()) - $loadingDiv.height())/2 + 'px',
left: (Math.min($bdiv.width(), $(window).width()) - $loadingDiv.width())/2 + 'px'
});
}
在我看来,最好修改 jqGrid 的基本代码(确切地说是修改beginReq函数的代码),以使上述“Loading ...” div 的位置始终发生变化。
更新:更改“正在加载...” div 的位置的更好的实现可能是
var gridIdAsSelector = $.jgrid.jqID(this.id),
$loadingDiv = $("#load_" + gridIdAsSelector),
$gbox = $("#gbox_" + gridIdAsSelector);
$loadingDiv.show().css({
top: (Math.min($gbox.height(), $(window).height()) - $loadingDiv.outerHeight())/2 + 'px',
left: (Math.min($gbox.width(), $(window).width()) - $loadingDiv.outerWidth())/2 + 'px'
});
代码应该像以前一样放在loadBeforeSend
。
更新2:演示演示了这个想法。我将代码包含在外部 loadComplate
仅用于演示目的,以展示它是如何工作的。loadui: 'block'
在演示中,“正在加载” div 保持可见,并且我还显示了在使用选项时显示的叠加层:
将加载消息的容器放置在固定位置,顶部和左侧分配为大约 40%-60%。那会解决它
它应该是这样的:
.loading-message-container {
position : fixed;
top:50%;
left: 45%;
}