如何从网格外部刷新基于jqgrid的网格?在网格代码中存在调用reloadGrid
的选项。但是,我想在jqgrid代码之外执行ajax文件上载后重新加载网格。如何在该上下文中调用reloadGrid
?
我意识到我可以完全重新加载整个页面,例如:location.reload();
但是重新加载了整个页面并将我带回到网格结果的第一页,并且有点失败了使用ajax的目的首先上传文件。
部分代码:
从jqgrid中调用reloadGrid,如下所示:
$("#thegrid").trigger("reloadGrid");
但是从我的ajaxupload中调用它时什么都不做:
onComplete: function(file, response) {
if (response == 'success') {
//location.reload();
$("#thegrid").trigger("reloadGrid");
}else if (response == 'error') {
alert("Doh!");
}
如果我取消注释location.reload()
,页面会重新加载但触发器未注释(如上例所示)根本没有任何反应。那我该如何重新加载这个网格呢?
答案 0 :(得分:4)
创建代码的函数来加载jqgrid。 首先卸载Jqgrid,然后调用上一个函数:
$("#thegrid").GridUnload();
Loadthegrid();
我希望这会有所帮助。
答案 1 :(得分:3)
我认为在jqGrid之外使用$("#thegrid").trigger("reloadGrid")
没有问题。可能问题在于onComplete
和ajaxupload
之间$("#thegrid")
的关系。
例如,您可以在jqGrid的同一页面上定义一个外部按钮,其中<table>
元素具有id =“thegrid”并使用
$("#button").click(function() {
if ($("#thegrid").length === 0) {
alert("no element with id='thegrid' is found");
}
if ($.isFunction($("#thegrid").jqGrid) !== true) {
alert("$('#thegrid') is not jqGrid");
}
var e = $("#thegrid").data("events");
if (typeof(e) !== "undefined" && typeof(e.reloadGrid) !== "undefined") {
$("#thegrid").trigger("reloadGrid");
} else {
alert("$('#thegrid') is not bound to 'reloadGrid' function");
}
}
您将看到代码在没有任何警报的情况下工作。您可以在ajaxupload的onComplete
处理程序中包含相同的代码。
要验证'reloadGrid'功能是否有效,您可以使用loadComplete:
loadComplete: function() {
alert("grid is loaded/reloaded");
}
更新:从jQuery 1.8开始,应该使用$._data($("#thegrid")[0], "events");
代替$("#thegrid").data("events")
来获取网格中所有事件的列表。