JQGrid:'beforeSelectRow'和'sortableRows' - 排除列可拖动?

时间:2011-05-20 16:01:54

标签: jquery jqgrid

我正在使用Olegsuggestion来使用beforeSelectRow事件来处理网格中单元格的点击。

Oleg在他的答案中的代码(我的答案完全模仿):

  

您可以使用以下按钮定义列

{ name: 'add', width: 18, sortable: false, search: false, 
formatter:function(){
    return "<span class='ui-icon ui-icon-plus'></span>"
}}
  

在上面的代码中,我使用了jqGrid的自定义格式化程序,但没有任何事件绑定。

的代码
beforeSelectRow: function (rowid, e) {
        var iCol = $.jgrid.getCellIndex(e.target);
        if (iCol >= firstButtonColumnIndex) {
        alert("rowid="+rowid+"\nButton name: "+buttonNames[iCol]);
    }

    // prevent row selection if one click on the button
    return (iCol >= firstButtonColumnIndex)? false: true;
}
  

其中firstButtonColumnIndex = 8buttonNames = {8:'Add',9:'Edit',10:'Remove',11:'Details'}。在您的代码中,您可以将警报替换为相应的函数调用。

问题是我的网格也是可排序的 - (我在网格上使用sortableRows方法)。如果用户在单击单元格时稍微移动鼠标,则永远不会触发beforeSelectRow事件(可排序事件)。

这在大多数情况下都是可取的 - 但是,我认为解决这个问题的方法是以某种方式将列从“句柄”中排除以拖动(排序)行并让我的onSelectRow事件触发这些列。我似乎无法弄清楚如何做到这一点!非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:2)

如果添加以下附加代码

,则可以解决此问题
var grid = $('#list'), tbody = $("tbody:first",grid[0]), ptr, td;
grid.bind('mouseover',function(e) {
    var iCol = $.jgrid.getCellIndex(e.target);
    if (iCol >= firstButtonColumnIndex) {
        tbody.sortable("disable");
    } else {
        tbody.sortable("enable");
    }
});

如果鼠标位于操作按钮上,代码将禁用jqGrid的可排序功能。因此,您只能在另一列中对行进行排序。

您可以看到修改过的演示here