我在这里找到了问题的解决方案: 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);
}
},
有什么想法吗?谢谢!
最佳答案
您应该明白 beforeSelectRow
和onCellSelect
在 click
内进行处理在网格体上设置的事件处理程序(参见jqGrid的the part source code)。而且回调onCellSelect
仅当beforeSelectRow
时才会被处理仅当通过单击选择该行时才返回 true(请参阅代码的 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);
。你看连OpenPopupWindow
的颜色都一样stackoverflow 上的另一个颜色是 $.jgrid.getCellIndex
。您当前的选择看起来与以下语句相同:
var theVariableHoldOnlyIntegerValues = true; // assign boolean
重命名函数OpenPopupWindow
至openPopupWindow
按顺序排列颜色。
关于jquery - jqGrid:使用 beforeSelectRow 它禁用我的 onCellSelect 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16241155/