我正在使用
Oleg的
suggestion来使用beforeSelectRow事件来处理网格中单元格的点击.
奥列格在他的答案中的代码(我的答案完全模仿):
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
andbuttonNames = {8:'Add',9:'Edit',10:'Remove',11:'Details'}
. In your code you can replace the alert to the corresponding function call.
问题是我的网格也是可排序的 – (我在网格上使用sortableRows方法).如果用户在单击单元格时稍微移动鼠标,则永远不会触发beforeSelectRow事件(可排序事件).
这在大多数情况下都是可取的 – 但是,我认为解决这个问题的方法是以某种方式将列从“句柄”中排除以拖动(排序)行并让我的onSelectRow事件触发这些列.我似乎无法弄清楚如何做到这一点!非常感谢任何帮助:)
解决方法
如果添加以下附加代码,则可以解决该问题
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"); } });