如何在删除期间覆盖 jqGrid 发送的 id 参数

How to override id parameter sent by jqGrid during delete

我正在使用 free-jqGrid 4.14.1 来显示在两列上具有复合 ID 的数据:idtype。因为 jqGrid 不支持组合键,所以我添加了一个名为 uniqueId 的字段,其中包含 idtype:

的串联值
$grid.jqGrid({
    url: /*ajaxListURL*/ '',
    editurl: /*ajaxActionURL*/ '',
    datatype: 'json',
    mtype: 'POST',
    loadonce: false,
    colModel: [
        {name: 'uniqueId', key: true, hidden: true}, //uniqueId=id+type
        {name: 'id', editable: true, hidden: true, editrules: {edithidden:true}, hidedlg: true},
        {name: 'type', editable: true, hidden: true, editrules: {edithidden:true}, hidedlg: true},
        {name: 'name', editable: true}
    ]
}).jqGrid('navGrid', '#pager', {edit: false, add: false, del: true}, {}, {}, { 
    onclickSubmit: function(options, delId){
        var rowData = $(this).jqGrid('getRowData', delId);
        return {
            id: rowData['id'],
            type: rowData['type']
        };
     }
}).jqGrid('inlineNav', '#pager', {add: false});

我的服务器需要 idtype 参数来编辑或删除记录。它无法处理解析 uniqueId 以便在没有我试图避免的后端重构的情况下提取 id

为了进行编辑,我将字段 idtype 设置为可编辑和隐藏,这样每次我编辑记录时 jqGrid 都会发送这两个字段。 (这很好用)

为了使删除有效,我实现了删除分页选项的onclickSubmit方法,并手动将idtype值添加到postData。但是jqGrid用uniqueId

的值覆盖了id的值

这是一个演示:https://jsfiddle.net/zohalexix/7wczzvur/

在删除时(不重命名参数 id)是否可以发送 id 参数的实际 id 值?

添加

即可解决问题
prmNames: { id: "uniqueId" }

jqGrid 的选项。它将通知 jqGrid 在编辑操作期间使用 uniqueId 而不是默认的 id 将 rowid 发送到服务器。

此外,您还可以添加一个选项

jsonReader: { id: "uniqueId" }

并删除绝对不需要的隐藏列 uniqueId。通常,每个隐藏的 DOM 元素都会降低页面性能并增加 Web 浏览器使用的内存大小。

此外,我建议删除 <div id="pager"></div>,使用 pager: true 而不是 pager: '#pager',并从 navGrid 和 [= 中删除 '#pager 参数20=]。通过使用 navOptionsinlineNavOptionsformEditingformDeletingsearchinginlineEditing 等可以使代码更具可读性。参见 https://jsfiddle.net/OlegKi/7wczzvur/26/对应修改的例子

最后,我建议您迁移到当前的 4.15.3 版本。我只支持最新版本的免费 jqGrid。例如,如果您在免费的 jqGrid 4.14.1 中发现一个错误,那么它只会在最新的代码中(在 4.15.4 中)得到修复。