【问题标题】:jqGrid - Saving an Inline Edit not workingjqGrid - 保存内联编辑不起作用
【发布时间】:2012-07-30 21:00:53
【问题描述】:

我有一个 jqGrid,其中包含使用内联添加/编辑功能的用户列表。出于某种原因,我无法让 jqGrid 保存我在调用 saveEdit 函数时所做的编辑,但如果我按下 enter 键,数据将保存。如果我注释掉 jqGrid 的 inlineNav 行,一切都会按预期进行。

为了澄清,当我的saveEdit 函数运行时,不会向服务器发送任何请求。当我按下回车键时,会向服务器发送一个请求。知道发生了什么吗?

这是我的代码:

var editParams = {
    afterSubmit: processResponse, 
    successfunc: function(response) {
        var processed = processResponse(response);
        if(processed[0] !== true) {
            $.jgrid.info_dialog($.jgrid.errors.errcap, processed[1], $.jgrid.edit.bClose);
        }
        return processed[0];
    }, 
    bottominfo: 'Fields marked with an (*) are required', 
    keys: true
};
$.extend($.jgrid.edit, editParams);
$('#grid')
    .jqGrid({
        datatype: 'json', 
        colNames: ['User ID', 'First Name', 'Last Name', 'Email'], 
        colModel: [
            {name: 'usr_id', jsonmap: 'usr_id', width: 75, editable: true, editrules: {required: true}, formoptions: {elmprefix: '(*) '}}, 
            {name: 'usr_fname', jsonmap: 'usr_fname', width: 75, editable: true, editrules: {required: true}, formoptions: {elmprefix: '(*) '}}, 
            {name: 'usr_lname', jsonmap: 'usr_lname', width: 75, editable: true, editrules: {required: true}, formoptions: {elmprefix: '(*) '}}, 
            {name: 'usr_email', jsonmap: 'usr_email', width: 125, editable: true, editrules: {required: true}, formoptions: {elmprefix: '(*) '}}
        ], 
        grouping: true, 
        shrinkToFit: false, 
        height: 200, 
        width: 800, 
        rowNum: 20, 
        rowList: [10, 20, 30, 40, 50, 100], 
        repeatitems: false, 
        ignoreCase: true, 
        jsonReader: { repeatitems: false, id: 'usr_id'}, 
        pager: '#grid_pager', 
        url: 'dataurl.php', 
        editurl: 'editurl.php', 
        ondblClickRow: inlineEdit, 
        onSelectRow: saveEdit
    })
    .jqGrid('navGrid', '#users_pager', {add: false, edit: false, del: false, refresh: false, search: false})
    .jqGrid('inlineNav', '#users_pager', {edit: false, save: false, cancel: false}); //If I comment out this line, everything works perfectly

var lastSel;
/* Start editing the row */
function inlineEdit(id, iRow, iCol) {
    $(this).jqGrid('editRow', id, true, function() { focusRow(id, iCol, this); });
}

function focusRow(id, iCol, table) {
    var ele = document.getElementById(id + '_' + table.p.colModel[iCol].name), 
        length = ele.value.length;
    ele.focus();
    if(ele.setSelectionRange) { //IE
        ele.setSelectionRange(length, length);
    }
    else if(ele.createTextRange) {
        var range = ele.createTextRange();
        range.collapse(true);
        range.moveEnd('character', length);
        range.moveStart('character', start);
        range.select();
    }
}

function saveEdit(id) {
    if(id && id != $(this).data('lastSel')) {
        /* Save the last selected row before changing it */
        $(this).jqGrid('saveRow', $(this).data('lastSel'), editParams);
        $(this).data('lastSel', id);
    }
    $(this).data('lastSel', id);
}

提前感谢任何帮助我的人。

【问题讨论】:

    标签: javascript jquery jqgrid


    【解决方案1】:

    哥们,你没有使用 inlineNav,你为什么要把它留在那里?第二个当你按下回车时,它不会调用你的 saveEdit 函数,默认情况下只有这样的功能。

    我看到您正在将您的记录保存在 onSelectRow 属性上,当按下回车键时,在内联编辑后,这不会被调用。你可以让你的钥匙:假。它不会在输入按键时触发对服务器的请求。

    【讨论】:

    • 我使用内联导航来添加记录。双击一行会调出内联编辑。 onSelectRow 中的方法应该保存该行,但从不调用服务器(总是返回 false 而没有 ajax 请求)。也许我错过了什么?
    • 我会将您的回复标记为答案,但请将此评论留给可能遇到此问题的任何其他人(以及我自己)。重读了几遍之后,突然觉得很震撼。尽管我使用$.extend($.jgrid.edit, editParams);,但这不会覆盖所有编辑的编辑参数。此外,调用editRow 不会使用初始化中定义的默认editUrl 参数或上面提到的扩展$.extend。如果我在这方面有任何错误,请纠正我,因为我的印象是扩展 jgrid.edit 并提供 editUrl 可以在这里工作。
    • 最后一件事。我的问题的最终解决方案来自奥列格的回答:stackoverflow.com/a/10887652/880685
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多