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

时间:2013-04-26 16:32:10

标签: jquery jqgrid

我在这里找到了解决问题的方法: jqGrid multiselect - limit the selection of the row only using the checkbox

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

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

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:6)

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

您可以采取的解决方法是将当前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。它将使代码更易于维护。另外,我建议您将函数OpenPopupWindow的名称更改为openPopupWindow。 JavaScript的命名转换要求使用仅具有第一个大写名称的函数用于构造函数。如果您选择该函数的名称为OpenPopupWindow,那么您可以提示将其与new运算符var test = new OpenPopupWindow(rowid);一起使用。您会看到,甚至stackoverflow上的OpenPopupWindow颜色也是$.jgrid.getCellIndex的颜色。您当前的选择与语句相同:

var theVariableHoldOnlyIntegerValues = true; // assign boolean

将函数OpenPopupWindow重命名为openPopupWindow按顺序显示颜色。