【问题标题】:jqGrid multiselect - limit the selection of the row only using the checkboxjqGrid 多选 - 仅使用复选框限制行的选择
【发布时间】:2011-11-29 11:05:19
【问题描述】:

早上好,我正在开发一个激活多选的 jqGrid。

我只需要使用 multisel 框来限制对行的选择,而不是通过单击行上的任何位置。 那是因为我需要通过单击某些单元格上的链接来执行一些操作,并且我不会更改活动的多选。 我试图设置 multiboxonly 属性,但这不是我需要的。 我没有找到其他任何东西可以自定义网格的这个功能。

【问题讨论】:

    标签: jqgrid multi-select


    【解决方案1】:

    您可以根据您的自定义beforeSelectRow 事件处理程序控制将在哪个单击上选择行。如果处理程序返回 true,则将选择该行。如果返回 false,则不会选择该行。

    beforeSelectRow的第二个参数是event objecte.target是被点击的DOM元素。您可以使用$(e.target).closest('td') 获取单击完成的单元格(<td>)。然后您可以使用$.jgrid.getCellIndex 来获取该行的单元格insido 的索引。 colModel 中的索引应指向包含复选框的“cb”列。所以代码可能如下:

    beforeSelectRow: function (rowid, e) {
        var $myGrid = $(this),
            i = $.jgrid.getCellIndex($(e.target).closest('td')[0]),
            cm = $myGrid.jqGrid('getGridParam', 'colModel');
        return (cm[i].name === 'cb');
    }
    

    对应的demo大家可以看here

    【讨论】:

    • 非常感谢,正是我需要的。
    • @Oleg:非常好,但它会阻止 onSelectRow 被触发。任何建议如何保持行选择(即黄色等),但也只能通过单击复选框启用多选。
    • @AndrewWhite:对不起,但我不确定你的意思。如果您从beforeSelectRow 返回false,您将停止选择并且onSelectRow 不会被调用。如果您返回true,它将被调用。因此,您可以完全控制行的选择。在the answer 中,您将找到演示一些多选选项如何工作的演示。
    • @Oleg:谢谢,multiboxonly:解决方案是真的
    【解决方案2】:

    我想建议更简单的解决方案:

    beforeSelectRow: function(rowid, e) { 
       return $(e.target).is('input[type=checkbox]');
    },
    

    【讨论】:

    • 如果您在该行中只有一个复选框,这将起作用。如果网格中存在任何其他带有复选框的列,并且如果用户单击它......那么它也会受到影响......所以在实施时要小心。
    【解决方案3】:

    当 multiselect 设置为 true 时,单击行上的任意位置都会选择该行;当 multiboxonly 也设置为 true 时,仅当单击复选框时才会进行多选。 所以答案是:

    multiboxonly: true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 2021-05-08
      • 2017-02-04
      • 1970-01-01
      相关资源
      最近更新 更多