我在这里找到了解决问题的方法: jqGrid multiselect - limit the selection of the row only using the checkbox
但取消了我的onCellSelect事件。简而言之,我需要能够在用户单击复选框列时选择行。上面链接中的解决方案显示了如何执行此操作但我需要能够对网格中的特定单元格执行操作,例如,当我单击第10列时,下面的代码会打开一个弹出窗口:
onCellSelect: function (rowid, iCol, cellcontent, e) {
if (iCol == 10) {
OpenPopupWindow(rowid);
}
},
有什么想法吗?谢谢!
答案 0 :(得分:6)
您应该了解beforeSelectRow
和onCellSelect
都是在click
事件处理程序内处理的,这些处理程序在网格主体上设置(请参阅jqGrid的the part source code)。此外,仅当onCellSelect
返回true时才会处理回调beforeSelectRow
,因此只有在点击时选择了该行(请参阅the lines代码)。
您可以采取的解决方法是将当前onCellSelect
的代码移到beforeSelectRow
的中:
beforeSelectRow: function (rowid, e) {
var $self = $(this),
iCol = $.jgrid.getCellIndex($(e.target).closest("td")[0]),
cm = $self.jqGrid("getGridParam", "colModel");
if (cm[iCol].name === "cb") {
return true;
}
if (iCol === 10) {
OpenPopupWindow(rowid);
}
return false;
}
只是一些小的常见附加说明。我建议您更改列号测试以测试列的名称:cm[iCol].name === 'myColumnName'
而不是iCol === 10
。它将使代码更易于维护。另外,我建议您将函数OpenPopupWindow
的名称更改为openPopupWindow
。 JavaScript的命名转换要求使用仅具有第一个大写名称的函数用于构造函数。如果您选择该函数的名称为OpenPopupWindow
,那么您可以提示将其与new
运算符var test = new OpenPopupWindow(rowid);
一起使用。您会看到,甚至stackoverflow上的OpenPopupWindow
颜色也是$.jgrid.getCellIndex
的颜色。您当前的选择与语句相同:
var theVariableHoldOnlyIntegerValues = true; // assign boolean
将函数OpenPopupWindow
重命名为openPopupWindow
按顺序显示颜色。