有人知道如何触发jqGrid的“正在加载”覆盖层吗?在网格加载时会显示。我知道我可以使用一个jquery插件,但我想保持我的应用程序外观和jqGrid中已经使用的一致。
我找到的最接近的内容是这个:
jqGrid display default "loading" message when updating a table / on custom update
- n8
有人知道如何触发jqGrid的“正在加载”覆盖层吗?在网格加载时会显示。我知道我可以使用一个jquery插件,但我想保持我的应用程序外观和jqGrid中已经使用的一致。
我找到的最接近的内容是这个:
jqGrid display default "loading" message when updating a table / on custom update
DisplayLoadingMessage()
的函数,那么 jqGrid 并没有这样的函数。你只能将 jqGrid 的 loadui 选项设置为enable(默认)、disable或block。我个人更喜欢block(参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)。但我认为这不是你想要的。
如果你喜欢 jqGrid 中的 "Loading..." 消息,那么唯一能做的就是自己创建相同的消息。这里我会解释 jqGrid 显示此消息的方法:将创建两个隐藏的div。如果你的表格 id 是 list,则这些 div 将如下所示:
<div style="display: none" id="lui_list"
class="ui-widget-overlay jqgrid-overlay"></div>
<div style="display: none" id="load_list"
class="loading ui-state-default ui-state-active">Loading...</div>
文本“Loading...”或“Lädt...”(德语)来自$.jgrid.defaults.loadtext
。div的ID将根据“lui_”或“load_”前缀和网格ID(“list”)构建。在发送ajax请求之前,jqGrid会使其中一个或两个div可见。如果loadui选项为enable,它将调用jQuery.show()
函数显示第二个div(id=“load_list”)。然而,如果loadui选项为block,则使用.show()
函数显示两个div(id=“lui_list”和id=“load_list”)。在ajax请求结束后,将对一个或两个div调用.hide()
jQuery函数。没了。
您可以在ui.jqgrid.css
或jquery-ui-1.8.custom.css
中找到所有CSS类的定义。
现在您已经拥有足够的信息来重现jqGrid的“Loading…”消息,但如果我是您,我会再三考虑是否真的想要这样做,或者jQuery blockUI插件是否更适合您的目标。
我使用
$('.loading').show();
$('.loading').hide();
不需要创建新的
简单来说,就是展示它:
$("#myGrid").closest(".ui-jqgrid").find('.loading').show();
$("#myGrid").closest(".ui-jqgrid").find('.loading').hide();
$('.loading').show();
需要覆盖的样式为 [.ui-jqgrid .loading]。
在我的问题中,我使用了
$('.jsgrid-load-panel').hide()
那么
$('.jsgrid-load-panel').show()
正如@Oleg所提到的,jQuery Block UI在开发基于ajax的应用程序时具有许多优秀的功能。使用它,您可以阻止整个UI或称为元素块的特定元素。
对于jqGrid,您可以将网格放入一个div(sampleGrid)中,然后像这样阻止网格:
$.extend($.jgrid.defaults, {
ajaxGridOptions : {
beforeSend: function(xhr) {
$("#sampleGrid").block();
},
complete: function(xhr) {
$("#sampleGrid").unblock();
},
error: function(jqXHR, textStatus, errorThrown) {
$("#sampleGrid").unblock();
}
}
});
它正在与$('div.loading').show()一起工作;即使对于其他组件,这也很有用
$('#editDiv').dialog({
modal : true,
width : 'auto',
height : 'auto',
buttons : {
Ok : function() {
//Call Action to read wo and
**$('div.loading').show();**
var status = call(...)
if(status){
$.ajax({
type : "POST",
url : "./test",
data : {
...
},
async : false,
success : function(data) {
retVal = true;
},
error : function(xhr, status) {
retVal = false;
}
});
}
if (retVal == true) {
retVal = true;
$(this).dialog('close');
}
**$('div.loading').hide();**
},
Cancel : function() {
retVal = false;
$(this).dialog('close');
}
}
});
datatype="local"
$.jgrid.extend({
// Loading function
loading: function (show) {
if (show === undefined) {
show = true;
}
// All elements of the jQuery object
this.each(function () {
if (!this.grid) return;
// Find the main parent container at level 4
// and display the loading element
$(this).parents().eq(3).find(".loading").toggle(show);
});
return show;
}
});
然后简单调用
$("#myGrid").loading();
或者
$("#myGrid").loading(true);
显示所有网格的加载状态(当然,每个网格的ID都要更改)或
$("#myGrid").loading(false);