在jqGrid中内联编辑行时排序列的问题

Cat*_*rea 6 jqgrid

我对网格的使用涉及在内联编辑模式下排序几行.

问题是:

  1. 在内联编辑一行或多行时,有没有办法执行排序?

  2. 如果没有,当我在内联编辑一行或多行时单击列标题时是否会跳转事件?(在排序内容之前我可以删除编辑的事件)

谢谢,Catalin

Ole*_*leg 7

一个有趣的问题!来自我的+1.

编辑行或单元格的排序问题在于访问编辑单元格的包含.jqGrid的当前代码不执行此操作,因此在click列标题的事件处理程序内部测试网格中是否有任何编辑行.如果存在一些编辑行/行,那么将停止排序而不调用onSortCol回调.

因此,只有第二种方法可以在排序之前保存或恢复编辑单元格.要实现这一点,有一个小问题.如果一个绑定额外的click列标题时它会被称为的jqGrid以前绑定的标准处理程序.因此,在处理单击事件之前,无法保存或放弃更改的编辑.可以用两种方式解决问题:要么可以sortData从新事件处理程序调用函数,要么应该更改绑定到click事件的顺序.以下代码演示了第二种方法:

$.each($grid[0].grid.headers, function () {
    var $th = $(this.el), i, l, clickHandler, clickHandlers = [],
        currentHandlers = $th.data('events'),
        clickBinding = currentHandlers.click;

    if ($.isArray(clickBinding)) {
        for (i = 0, l = clickBinding.length; i < l; i++) {
            clickHandler = clickBinding[i].handler;
            clickHandlers.push(clickHandler);
            $th.unbind('click', clickHandler);
        }
    }
    $th.click(function () {
        var p = $grid[0].p, savedRow = p.savedRow, j, len = savedRow.length;
        if (len > 0) {
            // there are rows in cell editing or inline editing
            if (p.cellEdit) {
                // savedRow has the form {id:iRow, ic:iCol, name:nm, v:value}
                // we can call restoreCell or saveCell
                //$grid.jqGrid("restoreCell", savedRow[0].id, savedRow[0].ic);
                $grid.jqGrid("saveCell", savedRow[0].id, savedRow[0].ic);
            } else {
                // inline editing
                for (j = len - 1; j >= 0; j--) {
                    // call restoreRow or saveRow
                    //$grid.jqGrid("restoreRow", savedRow[j].id);
                    $grid.jqGrid("saveRow", savedRow[j].id);
                }
            }
        }
    });
    l = clickHandlers.length;
    if (l > 0) {
        for (i = 0; i < l; i++) {
            $th.bind('click', clickHandlers[i]);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

在哪里$grid被定义为var $grid = $("#list").您可以通过以下演示了解它的工作原理.

  • @eklam:您使用哪个版本的jQuery"子类化"事件句柄?如果你使用jQuery 1.8或更高版本,你应该使用`$ ._ data($ th [0],"events");`而不是`$ th.data('events')`. (2认同)