中的示例http://www.trirand.net/demo/javascript/jqgrid/loading_data/scrollbar/index.htmlGuriddo 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);
当我打两次电话时:
$('#jqGrid').trigger('reloadGrid', {
page: 3
});
第一次请求:页面参数如预期的那样为3。
第二次请求:页面参数为1!?
我在刷新按钮上看到的问题与refreshstate相同:"current",它根本不起作用。
首先我可以确认这个错误。它也存在于更旧版本的jqGrid中(例如在jqGrid 4.6中)
if (ts.grid.prevRowHeight && ts.p.scroll) {
delete ts.p.lastpage;
ts.grid.populateVisible();
} else {
ts.grid.populate();
}
jqGrid在第一次重新加载网格时具有ts.grid.prevRowHeight
的undefined
值,并且将ts.grid.prevRowHeight
设置为22
(22px是行的高度)。因此,网格的下一次(第二次)重新加载将使用populateVisible
而不是populate
。函数populateVisible
仅使用当前滚动位置(bDiv
的scrollTop
),并且忽略网格的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加载当前版本的免费jqGrid。它是我的jqGrid分支,它基于jqGrid 4.7,包含许多增强功能(请参阅wiki和自述文件)。我刚刚发布了相应的修复程序。