来自http://www.trirand.net/demo/javascript/jqgrid/loading_data/scrollbar/index.html的示例 Guriddo jqGrid JS的版本:4.7.0和4.7.1
(function ($) {
'use strict';
$(function () {
$('#jqGrid').jqGrid({
url: 'http://trirand.com/blog/phpjqgrid/examples/jsonp/getjsonp.php?callback=?&qwery=longorders',
mtype: 'GET',
datatype: 'json',
page: 1,
colNames: ['Order ID', 'Customer ID', 'Order Date', 'Freight', 'Ship Name'],
colModel: [{
name: 'OrderID',
key: true,
width: 75
}, {
name: 'CustomerID',
width: 150
}, {
name: 'OrderDate',
width: 150
}, {
name: 'Freight',
width: 150
}, {
name: 'ShipName',
width: 150
}],
width: 750,
height: 250,
rowNum: 20,
scroll: 1, // set the scroll property to 1 to enable paging with scrollbar - virtual loading of records
emptyrecords: 'Scroll to bottom to retrieve new page', // the message will be displayed at the bottom
pager: '#jqGridPager'
});
});
})(jQuery);
当我打电话2次时:
$('#jqGrid').trigger('reloadGrid', {
page: 3
});
first time request:页面参数是预期的3。
second time request:页面参数是1!?
我在刷新按钮上看到的问题与刷新状态相同:'当前',它根本不起作用。
答案 0 :(得分:2)
首先,我可以确认这个错误。它也出现在更旧版本的jqGrid中(例如在jqGrid 4.6中)。原因如下(见the lines of the source code)
if (ts.grid.prevRowHeight && ts.p.scroll) {
delete ts.p.lastpage;
ts.grid.populateVisible();
} else {
ts.grid.populate();
}
jqGrid在第一次重新加载网格时undefined
的值为ts.grid.prevRowHeight
,而ts.grid.prevRowHeight
到22
的值为populateVisible
(22px是行的高度)。因此,网格的下一次(第二次)重新加载将使用populate
而不是populateVisible
。函数scrollTop
仅使用当前滚动位置(bDiv
的{{1}}),忽略网格的 page
参数。
因此我可以建议你解决问题的多个方法:如果你必须使用特定的旧版jqGrid(比如你必须使用jqGrid 4.7),那么你可以使用以下代码作为解决方法:
$('#jqGrid')[0].grid.prevRowHeight = undefined; // workaround!!
$('#jqGrid').trigger('reloadGrid', {
page: 3
});
或者,您可以将jquery.jqgrid.src.js
的代码修改为以下
if (ts.grid.prevRowHeight && ts.p.scroll && opts.page === undefined) {
delete ts.p.lastpage;
ts.grid.populateVisible();
} else {
ts.grid.populate();
}
我可以向您推荐另一个选项:您可以从github加载当前版本的free jqGrid。它是我的jqGrid的分支,它基于jqGrid 4.7并且包含许多增强功能(请参阅wiki和readme)。我刚刚发布了the corresponding fix。