【问题标题】:jqGrid Edit Cell and afterSubmitCelljqGrid 编辑单元格和 afterSubmitCell
【发布时间】:2016-01-26 07:50:27
【问题描述】:

我使用 jqGrid 4.9.3-pre - Oleg 的免费 jqGrid。我想添加一条新记录并在没有模式窗口的情况下进行编辑。

我这样做:

  1. 在 loadComplete 时,我添加一个 id=0 的新空记录。在这里我们可以添加一个 新纪录。
  2. 从数据库中添加新条目后,获取其 ID。替换 ID 上的 0 值。
  3. 添加新记录后会创建另一个空行,依此类推。

jsFiddle

我认为问题在于细胞仍然处于活动状态?

我找到了解决方案。感谢 Oleg!

var flag = false;
....
    afterSaveCell: function(rowid, cellname, value, iRow, iCol) {
           $('#' + lastRowId).attr("id", respText);
        },
        afterSubmitCell: function(serverresponse, rowid, cellname, value, iRow, iCol){
                      var rows = $("#contract_subgrid")[0].rows;
                      lastRowId = rows[rows.length-1].id;
             var response = (serverresponse.statusText).trim();
                  if (response == 'OK'){
                      respText = serverresponse.responseText;
                    if(respText=='0' || respText==""){
                        return [true,""];
                    }
                    else {
                     $(this).jqGrid('setCell', lastRowId, 'id', respText);
                   $(this).jqGrid('addRowData', undefined, {});
                    return [true,""];
                    }
                  }else{
                    return [false,respText];
                  }
          },
        loadComplete: function () {
          if(flag === false) { 
            $(this).jqGrid('addRowData', undefined, {});
          flag = true;
          }
        },

【问题讨论】:

  • 对不起,我不明白你想要实现的场景。在我看来,使用单元格编辑 (cellEdit: true) 似乎不是最好的选择。无论如何,如果您使用默认的cellsubmit:'clientArray',则永远不会调用afterSubmitCelladdRowData same id="0" 的用法不好。您可以有 id 重复项。您可以改用$(this).jqGrid('addRowData', undefined, {});。更好的是使用$(this).jqGrid('addRow', {position: "last"})inlineNav。您需要另外将defaultValue: "Intim" 修复为defaultValue: "IN"
  • 您可以在inlineEditing 内部使用aftersavefunc 来更新保存到服务器后的rowid。您需要为其指定editurl。看jsfiddle.net/OlegKi/tzp91wnf/2,在哪里需要加上editurlaftersavefunc的原因。
  • Добрый день Олег。 Если не против я вам лучше напишу по русскому。 Я хочу добавлять новые записи без 模态窗口。 Для этого я специально добавляю пустую строку с id=0。 По идее совпадений id быть не должно。 Т.к. когда мы изменяем что-то в ячейке - то это вносится в базу данных。 Иот сервера mysql приходит ID где была добавлена запись。 Далее заменяем id=0 на то, что пришло с сервера что бы избежать повтора id.
  • $(this).jqGrid('setCell', 0, 'id', serverresponse.responseText); $("#0").attr("id", serverresponse.responseText); $(this).jqGrid('addRowData', 0, {});
  • serverresponse.responseText вот здесь и будет id от сервера。 Я проверил вроде работает и id меняется。 Но записи которые мы добавляем постоянно активные - в этом и проблема。

标签: javascript jqgrid free-jqgrid


【解决方案1】:

抱歉,我不明白您要实现的场景。在我看来,使用单元格编辑 (cellEdit: true) 似乎不是最佳选择。无论如何,如果您使用默认设置的cellsubmit:'clientArray',则永远不会调用afterSubmitCelladdRowData 与相同的id="0" 的用法不好。您可以生成 id 重复项。你可以使用

$(this).jqGrid('addRowData', undefined, {});

相反。使用undefined 作为rowid 将生成新的unique rowid。更好的是使用

$(this).jqGrid('addRow', {position: "last"});

inlineNav。您需要另外将defaultValue: "Intim" 修复为defaultValue: "IN"

您可以在inlineEditing 内部定义aftersavefunc 以在保存到服务器后更新rowid。您需要为其指定editurl。查看 jsfiddle.net/OlegKi/tzp91wnf/2 您需要添加 editurlaftersavefunc 的原因。您需要同时使用.attr("id", newId).jqGrid('setCell', rowid, 'id', newId) 来更新由后端生成的id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多