【发布时间】:2011-11-29 11:05:19
【问题描述】:
早上好,我正在开发一个激活多选的 jqGrid。
我只需要使用 multisel 框来限制对行的选择,而不是通过单击行上的任何位置。 那是因为我需要通过单击某些单元格上的链接来执行一些操作,并且我不会更改活动的多选。 我试图设置 multiboxonly 属性,但这不是我需要的。 我没有找到其他任何东西可以自定义网格的这个功能。
【问题讨论】:
标签: jqgrid multi-select
早上好,我正在开发一个激活多选的 jqGrid。
我只需要使用 multisel 框来限制对行的选择,而不是通过单击行上的任何位置。 那是因为我需要通过单击某些单元格上的链接来执行一些操作,并且我不会更改活动的多选。 我试图设置 multiboxonly 属性,但这不是我需要的。 我没有找到其他任何东西可以自定义网格的这个功能。
【问题讨论】:
标签: jqgrid multi-select
您可以根据您的自定义beforeSelectRow 事件处理程序控制将在哪个单击上选择行。如果处理程序返回 true,则将选择该行。如果返回 false,则不会选择该行。
beforeSelectRow的第二个参数是event object,e.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。
【讨论】:
beforeSelectRow 返回false,您将停止选择并且onSelectRow 不会被调用。如果您返回true,它将被调用。因此,您可以完全控制行的选择。在the answer 中,您将找到演示一些多选选项如何工作的演示。
我想建议更简单的解决方案:
beforeSelectRow: function(rowid, e) {
return $(e.target).is('input[type=checkbox]');
},
【讨论】:
当 multiselect 设置为 true 时,单击行上的任意位置都会选择该行;当 multiboxonly 也设置为 true 时,仅当单击复选框时才会进行多选。 所以答案是:
multiboxonly: true
【讨论】: