1

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

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

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

有任何想法吗?谢谢!

4

1 回答 1

6

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

作为一种解决方法,您可以做的只是将您当前的代码移动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. 它将使代码更易于维护。此外,我建议您将函数名称更改OpenPopupWindowopenPopupWindow. JavaScript 的命名转换要求仅将具有第一个大写名称的函数用于构造函数。如果您选择函数的名称,那么您将给出与operator:OpenPopupWindow一起使用它的提示。您会看到,甚至stackoverflow 上的颜色与. 您当前的选择看起来与语句相同:newvar test = new OpenPopupWindow(rowid);OpenPopupWindow$.jgrid.getCellIndex

var theVariableHoldOnlyIntegerValues = true; // assign boolean

重命名函数OpenPopupWindowopenPopupWindow使颜色井然有序。

于 2013-04-26T16:57:01.210 回答