我想要 jqGrid 中的以下能力。当用户单击网格中的复选框时,会选择一行。当用户随后单击“控制键”并选择复选框时,用户随后可以选择更多行。然后,当用户单击复选框并且如果选择了当前行,则选择当前行。jqGrid可以做到这一点吗?但是,单击单元格时不会发生任何事情。复选框中应该只有事件可用。
问问题
1253 次
1 回答
0
是的,这应该是可能的。看一下复选框选择的正常示例- 它让您了解其中的一部分。但是,它并没有真正按照您期望的方式处理 SHIFT 选择内容。
我做了一些搜索,在 jqGrid 支持网站上找到了这段代码:
function multiSelectHandler(sid, e) {
var grid = $(e.target).closest("table.ui-jqgrid-btable");
var ts = grid[0], td = e.target;
var scb = $(td).hasClass("cbox");
if ((td.tagName == 'INPUT' && !scb) || td.tagName == 'A') {
return true;
}
var sel = grid.getGridParam('selarrrow');
var selected = $.inArray(sid, sel) >= 0;
if (e.ctrlKey || (scb && (selected || !e.shiftKey))) {
grid.setSelection(sid,true);
} else {
if (e.shiftKey) {
var six = grid.getInd(sid);
var min = six, max = six;
$.each(sel, function() {
var ix = grid.getInd(this);
if (ix < min) min = ix;
if (ix > max) max = ix;
});
while (min <= max) {
var row = ts.rows[min++];
var rid = row.id;
if (rid != sid && $.inArray(rid, sel)<0) {
grid.setSelection(row.id, false);
}
}
} else if (!selected) {
grid.resetSelection();
}
if (!selected) {
grid.setSelection(sid,true);
} else {
var osr = grid.getGridParam('onSelectRow');
if ($.isFunction(osr)) {
osr(sid, true);
}
}
}
}
要使用它,您应该能够将 beforeSelectRow 处理程序设置为此函数。前任。像这样的东西:
$("#gridid").jqGrid({
// Rest of code to configure grid
beforeSelectRow: multiSelectHandler,
// Other handlers/configuration
});
于 2012-04-21T13:51:13.083 回答