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

标签 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); 
      }
  },

有什么想法吗?谢谢!

最佳答案

您应该明白 beforeSelectRowonCellSelectclick 内进行处理在网格体上设置的事件处理程序(参见jqGrid的the part source code)。而且回调onCellSelect仅当beforeSelectRow时才会被处理仅当通过单击选择该行时才返回 true(请参阅代码的 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 。这将使代码更易于维护。另外我建议您更改函数名称 OpenPopupWindowopenPopupWindow 。 JavaScript 的命名转换要求仅在构造函数中使用第一个大写的函数名称。如果您选择函数名称为 OpenPopupWindow然后你给出使用 new 的提示运营商:var test = new OpenPopupWindow(rowid); 。你看连OpenPopupWindow的颜色都一样stackoverflow 上的另一个颜色是 $.jgrid.getCellIndex 。您当前的选择看起来与以下语句相同:

var theVariableHoldOnlyIntegerValues = true; // assign boolean

重命名函数OpenPopupWindowopenPopupWindow按顺序排列颜色。

关于jquery - jqGrid:使用 beforeSelectRow 它禁用我的 onCellSelect 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16241155/

相关文章:

javascript - 使用 CSS 在复选框中显示自定义的勾号、叉号和减号图标

javascript - jQuery - TableSorter 不工作

jquery - 用于动态加载的缩略图轮播

jqgrid - 这两个不同的jqGrid有什么区别?

javascript - 从一个 ColModel 获取值,执行数学运算并将值应用到其他 ColModel

javascript - 升级到 jQuery 1.7 并更改事件对象

jquery - 使用 jquery 将列表项的一部分替换为来自表单的输入

使用工具栏搜索在 jqGrid 中默认在列中间搜索

java - 如何使用数据库中的动态数据显示多个页面?

javascript - jqGrid 仅适用于模态的隐藏属性