刷新jqGrid不会在启用无限滚动的情况下保存当前页面位置

时间:2015-03-18 11:32:48

标签: javascript jquery jqgrid pagination jqgrid-asp.net

来自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!?

我在刷新按钮上看到的问题与刷新状态相同:'当前',它根本不起作用。

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.prevRowHeight22的值为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并且包含许多增强功能(请参阅wikireadme)。我刚刚发布了the corresponding fix