jqGrid multiselect-仅使用复选框限制行的选择

jqGrid multiselect-仅使用复选框限制行的选择,jqgrid,multi-select,Jqgrid,Multi Select,早上好,我正在一个jqGrid上工作,这个jqGrid的multiselection处于活动状态 我只需要使用multisel框来限制行的选择,而不是单击行上的任何地方。 这是因为我需要通过单击某些单元格上的链接来执行某些操作,并且我不会更改活动的多行选择。 我试图设置multiboxonly属性,但这不是我需要的。 我没有找到任何其他方法来自定义网格的此功能。您可以根据自定义事件处理程序控制选择哪一行。如果处理程序返回true,则将选择该行。如果返回false,则不会选择该行 beforeSe

早上好,我正在一个jqGrid上工作,这个jqGrid的multiselection处于活动状态

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

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

beforeSelectRow的第二个参数是,单击的DOM元素。您可以获取单元格(
),在该单元格中使用
$(e.target).closest('td')
完成单击。然后,您可以使用获取行的单元格insideo的索引。
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');
}

您可以看到相应的演示。

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

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

当multiselect设置为true时,单击行上的任意位置可选择该行;如果multiboxonly也设置为true,则只有在单击复选框时,才会进行多重选择。 因此,答案是:

multiboxonly: true

非常感谢,这正是我所需要的。@Oleg:很好,但它能阻止电灯被烧掉。任何关于如何保留行选择(如黄色等)但仅通过单击复选框启用多选的建议。@AndrewWhite:对不起,我不确定您的意思。如果您在选择行之前从
返回
false
,您将停止选择,并且不会调用
onsemeow
。如果返回
true
,将调用它。因此,您可以完全控制行的选择。在中,您将看到演示某些multiselect选项如何工作的演示。@Oleg:谢谢,multiboxonly:true是解决方案如果行中只有一个复选框,则此选项将起作用。如果网格中存在任何其他带有复选框的列,并且用户单击该列,则该列也会受到影响。。。所以在实施时要小心。