jqGrid rowNum 选项问题

jqGrid rowNum option issue

假设 navgrid 中的行号从 10 更改为 30,并且我们像这样处理 onPaging:

...
onPaging: function(pgbtn) {
    var rowNum = $(this).getGridParam('rowNum');
    return 'stop';
}

这是预期的行为吗,因为我认为 rowNum 应该是 30?

执行顺序发生了变化(比较 jqGrid 4.4.0 中的 the line in jqGrid 4.7.0 with the line)。 jqGrid 首先在 jqGrid 4.4.0 中更改了 rowNum``and then calledonPaging`,但在 jqFeid 4.7.0 中更改了顺序。

要访问 rowNum 的新值,应该直接从相应的 <select> 控件中获取 rowNum 的值。如果你使用网格底部的pager,那么对应的代码可能如下:

onPaging: function (pgButton) {
    var p = $(this).jqGrid("getGridParam"),
        newRowNum = parseInt($(p.pager).find(".ui-pg-selbox").val());

    if (...) { // some stop criteria
        return "stop";
    }
}

如果你使用 toppager: true 选项,那么 jqGrid 在网格的顶部创建寻呼机,然后它将 toppager 参数的值从 true 更改为寻呼机。所以你可以使用像

这样的代码
onPaging: function (pgButton) {
    var p = $(this).jqGrid("getGridParam"),
        newRowNum = parseInt($(p.toppager).find(".ui-pg-selbox").val());

    if (...) { // some stop criteria
        return "stop";
    }
}

在前面的代码示例中只使用 p.toppager 而不是 p.pager

在使用 both top 和 bottom 寻呼机的情况下,您必须获取两个值并选择不等于 rowNum 参数值的值:

onPaging: function (pgButton) {
    var p = $(this).jqGrid("getGridParam"),
        rowNumBottom = parseInt($(p.pager).find(".ui-pg-selbox").val()),
        rowNumTop = parseInt($(p.toppager).find(".ui-pg-selbox").val()),
        newRowNum = p.rowNum === rowNumTop ? rowNumBottom: rowNumTop;

    if (...) { // some stop criteria
        return "stop";
    }
}

顺便说一下,如果在寻呼机中进行其他更改后调用 onPaging,则存在关闭问题,例如,如果用户在具有新寻呼机号码的输入框中键入新值。

我现在正在开发 free jqGrid 作为 my fork on github. I change the code of jqGrid so that onPaging receives the second parameter which is object with the properties newPage, currentPage, lastPage, currentRowNum and newRowNum. The corresponding jQuery event jqGridPaging are added too. Moreover I have changed the value of the first parameter so that it corresponds the documentation 值将是字符串 "first""last""prev""next" 以防用户单击相应的寻呼机按钮。 4.7版本实际使用的是对应寻呼机按钮的id,而不是"first""last""prev""next"。所以字符串 "first""last""prev""next" 可以附加 "_" 和寻呼机(或 toppager)的 ID。

因此回调代码中直接使用options.newRowNumoptions.currentRowNum即可:

onPaging: function (pgButton, options) {
    // one can use options.newRowNum directly
    // the value options.currentRowNum is identical to 
    // $(this).jqGrid("getGridParam", "rowNum")

    if (...) { // some stop criteria
        return "stop";
    }
}

对于顶部和底部寻呼机,我想补充 Oleg 的回复:

onPaging: function (pgButton) {
    var p = $(this).jqGrid("getGridParam"),
        rowNumBottom = parseInt($(p.pager).find(".ui-pg-selbox").val()),
        rowNumTop = parseInt($(p.toppager).find(".ui-pg-selbox").val()),
        newRowNum = p.rowNum === rowNumTop ? rowNumBottom: rowNumTop;

    if (...) { // some stop criteria
        return "stop";
    }

    // update the current value so subsequent changes are detected
    p.rowNum = newRowNum;

}

这处理了用户在顶部分页器上更改值,然后在底部分页器上再次更改的情况。上面的代码将继续检测顶部寻呼机值。