jqGrid:使用beforeSelectRow它会禁用我的onCellSelect事件
我在这里找到了我的问题的解决方案: jqGrid multiselect – 仅使用复选框限制行的选择
但这取消了我的onCellSelect事件。 简而言之,我需要能够在用户单击复选框列时选择行。 上面链接中的解决方案显示了如何执行此操作但我需要能够对网格中的特定单元格执行操作,例如,当我单击第10列时,下面的代码会打开一个弹出窗口:
onCellSelect: function (rowid, iCol, cellcontent, e) { if (iCol == 10) { OpenPopupWindow(rowid); } },
有任何想法吗? 谢谢!
您应该了解onCellSelect
和onCellSelect
都是在网格主体上设置的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
按顺序显示颜色。