JQGrid:“选择行之前”和“sortableRows” - 排除列不可拖动?

发布于 2024-11-08 17:26:17 字数 1382 浏览 0 评论 0原文

我正在使用 Oleg建议使用beforeSelectRow事件来处理对其中单元格的点击我的网格。

奥列格在他的回答中的代码(我的完全模仿):

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

{ 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:'添加',9:'编辑',10:'删除',11:'详细信息'}。在您的代码中,您可以将警报替换为相应的函数调用。

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

这在大多数情况下都是可取的 - 但是,我认为解决此问题的方法是以某种方式排除列作为“句柄”以拖动(排序)行,并让我的 onSelectRow 事件在这些列上触发。我似乎不知道该怎么做!非常感谢任何帮助:)

I am using Oleg's suggestion to use the beforeSelectRow event to handle clicks on cells within my grid.

Oleg's code in his answer (which mine exactly mimics):

You can define the columns with buttons like following

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

In the code above I do use custom formatter of jqGrid, but without any event binding. The code of

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;
}

where firstButtonColumnIndex = 8 and buttonNames = {8:'Add',9:'Edit',10:'Remove',11:'Details'}. In your code you can replace the alert to the corresponding function call.

The problem is that my grid is also sortable- (I use the sortableRows method on my grid). If the user is moving the mouse even a little when clicking the cell, the beforeSelectRow event is never triggered (the sortable event is).

This is desirable in most situations- however, I think what would fix this is to somehow exclude columns from being 'handles' to drag (sort) the row and let my onSelectRow event trigger on those columns. I just can't seem to figure out how to do this! Any help is extremely appreciated :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

女中豪杰 2024-11-15 17:26:17

如果添加以下附加代码,则可以解决该问题,

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 的可排序功能。因此,您只能对另一列中的行进行排序。

您可以在此处查看修改后的演示。

You can fix the problem if you add the following additional code

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");
    }
});

the code will be disable sortable feature of jqGrid if the mouse will be over the actions buttons. So you will be able to sort the rows only in another column.

You can see the modified demo here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文