【问题标题】:jqGrid inline edit: how to save again if post returns error [duplicate]jqGrid内联编辑:如果帖子返回错误如何再次保存[重复]
【发布时间】:2011-06-02 16:57:03
【问题描述】:

jQgrid 行使用内联编辑模式进行编辑。 按 Enter 使用 http POST 将数据发送到服务器。 如果出现错误,POST 方法返回状态 400 Bad reguest。下面代码中的 errorofunc 在此显示错误 案子。 用户在行中更正数据并再次按回车键。

按下回车键被忽略,没有任何反应。如果返回 404 错误,看起来 Enter 键未绑定。 已编辑行中的更改已丢失,无法保存。

我尝试在errorfunc中设置

restoreAfterError = false; grid.restoreAfterErorr = false;

但出错后仍无法再次保存行。

400错误返回后如何保存正确的行数据?

<script type="text/javascript">
var lastSelectedRow;
$(function () {
            var grid = $("#grid");
            grid.jqGrid({
                url: '/Grid/GetData',
                datatype: "json",
                mtype: 'POST',
                scroll: 1,
                multiselect: true,
                multiboxonly: true,
                scrollingRows : true,
                autoencode: true,
                colModel: [
        { name: 'Source', fixed: true, editable: true, width: 30 },
        { name: 'Est', fixed: true, editable: true, width: 271 },
        { name: 'Istopic', fixed: true, editable: true, width: 57 },
        {name: 'Critical', fixed: true, editable: true, width: 50}
    ],

                gridview: true,
                pager: '#pager',
                sortname: 'est',
                viewrecords: true,
                rowNum: 30,
                sortorder: "asc",
                editurl: '/Grid/Edit'
            });

            $("#grid").jqGrid('bindKeys', {
                onEnter: function(rowid) {
                    doeditRow(rowid);
                }
            }  );

        });

        function doeditRow(rowID) {
            var grid2 = $("#grid");
            if (rowID && rowID !== lastSelectedRow) {
                grid2.jqGrid('restoreRow', lastSelectedRow);
                lastSelectedRow = rowID;
            }
            invokeEditRow();
        }

        function errorfunc(rowID, response) {
            // todo: why this does not allow Enter key to continue ase after error:
            restoreAfterError = false;
            $("#grid").restoreAfterErorr = false;
            alert(response.responseText);
            lastSelectedRow = rowID;
            invokeEditRow();
            return true;
        }


        function invokeEditRow() {
             $("#grid").jqGrid('editRow', lastSelectedRow ,true,null, null, null, {},
                 null,
                 errorfunc
             );
        }
    </script>

<div id="grid1container" style="width: 100%;">
    <table id="grid">
    </table>
    <div id="pager">
    </div>
</div>

更新:errrofunc 调用 editrow 哪个 根据 https://github.com/tonytomov/jqGrid/blob/master/js/grid.inlinedit.js 应再次设置回车键保存。 由于未知原因,这不 发生。

更新:在 errorfunc 网格中。改为

        $("#grid").restoreAfterErorr = false;

根据奥列格的评论

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    您在 errorfunc 实现 (grid.restoreAfterErorr) 中使用变量 gridgridundefined,并且您在该行中有异常。

    已更新:您应该将alert(response.responseText); 替换为

    $.jgrid.info_dialog($.jgrid.errors.errcap,'<div class="ui-state-error">'+
        response.responseText +'</div>', $.jgrid.edit.bClose,{buttonalign:'right'});
    

    查看与标准情况下相同样式的对话框。内联编辑中的errorfunc 负责显示错误消息本身。

    【讨论】:

    • @Oleg:谢谢。我通过将grid 更改为$("#grid") 来更新测试用例。问题仍然存在。要对此进行测试,您可以使用我发送给您的相同私有测试 url。在第一列(Allikas)输入超过 30 个字符,然后按 Enter。出现错误信息。编辑 Allikas 列,使其少于 30 个字符,然后再次按 Enter。此回车键被忽略,数据不保存。出错后如何保存数据?顺便提一句。出于未知的原因,即使网格。使用时,网格中不会发生异常。线。仍然出现来自数据库的错误警告框。
    • @Andrus:你能把jquery.jqGrid.min.js换成jquery.jqGrid.src.js吗?
    • @Andrus:我似乎开始明白你的网站出了什么问题。您过于频繁地进入编辑模式。例如,在errorfunc 内部,您不应调用invokeEditRow。此外,如果您按回车键保存行,您不仅会保存它,而且还会收到keypress 事件以开始内联编辑(请参阅bindKeys),这会导致非常奇怪的行为。
    • @Andrus:请参阅我的回答的已更新部分。
    • @Oleg:我将您需要的所有更改添加到测试网址。问题仍然存在。我从 errorfunc 中删除了 editRow 调用。在该行之后根本无法在错误后编辑。我尝试将 errorfunc 错误消息更改为无模式,如 loaderror 中,但此消息未出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多