Jquery jqGrid:使用beforeSelectRow将禁用我的onCellSelect事件

Jquery jqGrid:使用beforeSelectRow将禁用我的onCellSelect事件,jquery,jqgrid,Jquery,Jqgrid,我在这里找到了解决问题的方法: 但这会取消我的onCellSelect事件。简而言之,我需要仅当用户单击复选框列时才能选择行。上面链接中的解决方案显示了如何做到这一点,但我需要能够对网格中的特定单元格执行操作,例如,当我单击第10列时,下面的代码会打开一个弹出窗口: onCellSelect: function (rowid, iCol, cellcontent, e) { if (iCol == 10) { OpenPopupWindow(rowid);

我在这里找到了解决问题的方法:

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

  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#。