jqGrid:使用beforeSelectRow它会禁用我的onCellSelect事件

我在这里找到了我的问题的解决方案: jqGrid multiselect – 仅使用复选框限制行的选择

但这取消了我的onCellSelect事件。 简而言之,我需要能够在用户单击复选框列时选择行。 上面链接中的解决方案显示了如何执行此操作但我需要能够对网格中的特定单元格执行操作,例如,当我单击第10列时,下面的代码会打开一个弹出窗口:

onCellSelect: function (rowid, iCol, cellcontent, e) { if (iCol == 10) { OpenPopupWindow(rowid); } }, 

有任何想法吗? 谢谢!

您应该了解onCellSelectonCellSelect都是在网格主体上设置的click事件处理程序内处理的(请参阅jqGrid 的部分源代码 )。 此外,仅当beforeSelectRow返回true时才会处理回调onCellSelect因此只有在点击时选择了行(参见代码行 )。

您可以做的解决方法是在onCellSelect移动当前的onCellSelect代码:

 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按顺序显示颜色。