jqGrid在编辑模式下删除行并传递其他数据

时间:2016-01-12 20:42:18

标签: jquery jqgrid

当行处于编辑模式(inlinde编辑)并且用户单击删除(navgrid)时,我遇到传递其他删除数据的问题。

这是我的代码:

    .navGrid('#' + childGridPagerID, {add: false,edit: true,del: true,   cancel: true, refresh: true, view: true, search:false},{},
                {// edit options
                        editCaption: "Exercise Special Note",template: template,
                        errorTextFormat: function (data) {
                            return 'Error: ' + data.responseText
                        },
                },
                { // del options
                    mtype:"POST", reloadAfterSubmit:true, serializeDelData: function (postdata) {
                        var selRowId = $("#" + childGridID).jqGrid ('getGridParam', 'selrow');
                        //console.log(selRowID);

                        if ($("#"+selRowId).attr("editable") === "1") {
                            $("#" + childGridID).editRow(selRowId, false);
                            var rowdata = $("#" + childGridID).getRowData(selRowId);
                        }
                        console.log(rowdata);

                    // append postdata with any information
                    }
                }
    )

我知道文档说getRowData在编辑模式下不起作用所以我试图在调用getRowData之前禁用编辑模式,但仍然在控制台日志中获取html而不是真实数据。我还看到我可以先保存行,然后在删除之前获取我的数据,问题是大多数字段都是必需的,用户可能会删除该行而不填写所有字段,这会提示用户输入必填字段

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您应该致电restoreRowsaveRow而不是editRow内的serializeDelData。顺便说一句postdata包含删除行的ID,因此您不需要使用.jqGrid ('getGridParam', 'selrow')来获取相同的信息。修改后的代码可以是:

serializeDelData: function (postdata) {
    var rowId = postdata.id; // or postdata[this.p.prmNames[id]]

    if ($("#"+rowId).attr("editable") === "1") {
        $(this).restoreRow(rowId);
        var rowdata = $(this).getRowData(selRowId);
        console.log(rowdata);
    }

    // append postdata with any information
    ...

    return postdata;
}

顺便说一下,您可以考虑使用另一个回调来扩展发布到服务器的信息。例如,onclickSubmit的目标正是提供此类信息。它可以返回{}或将与主要信息合并的对象。代码可能类似于

onclickSubmit: function (deleteOptions, rowids) {
    $(this).jqGrid("restoreRow", rowids);
    var rowData = $(this).jqGrid("getRowData", postdata);
    return {id1: rowData.id1, id2: rowData.id2};
}