Jquery jqGrid:使用beforeSelectRow将禁用我的onCellSelect事件
我在这里找到了解决问题的方法: 但这会取消我的onCellSelect事件。简而言之,我需要仅当用户单击复选框列时才能选择行。上面链接中的解决方案显示了如何做到这一点,但我需要能够对网格中的特定单元格执行操作,例如,当我单击第10列时,下面的代码会打开一个弹出窗口:Jquery jqGrid:使用beforeSelectRow将禁用我的onCellSelect事件,jquery,jqgrid,Jquery,Jqgrid,我在这里找到了解决问题的方法: 但这会取消我的onCellSelect事件。简而言之,我需要仅当用户单击复选框列时才能选择行。上面链接中的解决方案显示了如何做到这一点,但我需要能够对网格中的特定单元格执行操作,例如,当我单击第10列时,下面的代码会打开一个弹出窗口: onCellSelect: function (rowid, iCol, cellcontent, e) { if (iCol == 10) { OpenPopupWindow(rowid);
onCellSelect: function (rowid, iCol, cellcontent, e) {
if (iCol == 10) {
OpenPopupWindow(rowid);
}
},
有什么想法吗?谢谢大家! 您应该了解,在网格主体上设置的
单击事件处理程序中处理beforeSelectRow
和onCellSelect
。此外,只有当在选择行之前的返回true时,才会处理回调onCellSelect
,因此只有当通过单击选择行时(请参阅代码部分)
作为一种解决方法,您只需将当前的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]。名称==='myColumnName'
而不是iCol==10
。这将使代码更易于维护。此外,我建议您将函数名OpenPopupWindow
更改为OpenPopupWindow
。JavaScript的命名转换要求只对构造函数使用首字母大写的函数。如果将函数名选择为OpenPopupWindow
,则给出了将其与new
运算符一起使用的提示:var test=new-OpenPopupWindow(rowid)代码>。您可以看到,甚至stackoverflow上的OpenPopupWindow
的颜色也与$.jgrid.getCellIndex
的颜色相同。您当前的选择与下面的语句相同:
var theVariableHoldOnlyIntegerValues = true; // assign boolean
将函数OpenPopupWindow
重命名为OpenPopupWindow
将颜色按顺序排列。您应该了解,beforeSelectRow
和onCellSelect
都是在网格体上设置的单击事件处理程序内部处理的(请参阅jqGrid的部分)。此外,只有当在选择行之前的返回true时,才会处理回调onCellSelect
,因此只有当通过单击选择行时(请参阅代码部分)
作为一种解决方法,您只需将当前的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]。名称==='myColumnName'
而不是iCol==10
。这将使代码更易于维护。此外,我建议您将函数名OpenPopupWindow
更改为OpenPopupWindow
。JavaScript的命名转换要求只对构造函数使用首字母大写的函数。如果将函数名选择为OpenPopupWindow
,则给出了将其与new
运算符一起使用的提示:var test=new-OpenPopupWindow(rowid)代码>。您可以看到,甚至stackoverflow上的OpenPopupWindow
的颜色也与$.jgrid.getCellIndex
的颜色相同。您当前的选择与下面的语句相同:
var theVariableHoldOnlyIntegerValues = true; // assign boolean
将函数OpenPopupWindow
重命名为OpenPopupWindow
将颜色按顺序排列。为了简单起见,我编辑了代码。我使用的是列名。非常感谢您的详细解释。这真是个好消息@麦克斯:不客气!我很高兴你没有因为我对名字的评论而生气。保持名称转换非常重要。我自己也有同样的问题,因为我来自C/C++/C#。我编辑代码只是为了简单。我使用的是列名。非常感谢您的详细解释。这真是个好消息@麦克斯:不客气!我很高兴你没有因为我对名字的评论而生气。保持名称转换非常重要。我自己也有同样的问题,因为我来自C/C++/C#。