我正在使用Oleg的suggestion来使用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 = 8
和buttonNames = {8:'Add',9:'Edit',10:'Remove',11:'Details'}
。在您的代码中,您可以将警报替换为相应的函数调用。
问题是我的网格也是可排序的 - (我在网格上使用sortableRows
方法)。如果用户在单击单元格时稍微移动鼠标,则永远不会触发beforeSelectRow
事件(可排序事件)。
这在大多数情况下都是可取的 - 但是,我认为解决这个问题的方法是以某种方式将列从“句柄”中排除以拖动(排序)行并让我的onSelectRow
事件触发这些列。我似乎无法弄清楚如何做到这一点!非常感谢任何帮助:)
答案 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。