以编程方式选择jqGrid中设置为multiselect的所有行的最佳方法是什么?
代码可以一次一个地循环遍历所有行并选择每一行,但是不检查网格标题中的复选框。我正在考虑只触发标题行复选框的单击事件,但这会假设底层的jqGrid实现。必须有更好的方法......
提前致谢!
答案 0 :(得分:6)
如果通过手动单击每个行来选择多选jqGrid中的所有行,则不会检查标题中的复选框,因此当您以编程方式执行时,我不一定会发生这种情况(如果您对每一行使用setSelected(rowid,true),它相当于点击每一行,因为“true”参数表示应为每一行触发点击事件。
所以事实上,如果你想要检查所有这些并且想要检查标题中的复选框,触发点击的事件可能是你最好的选择。如果您深入了解源代码并查看单击复选框时发生的情况,实际上只是循环遍历所有行并将每个行设置为选中,所以我认为您不会做得更好
答案 1 :(得分:3)
我认为没有什么是不可能的,这是替代解决方案。您可以一次一个地遍历所有行并选择每个行,然后手动检查网格标题中的复选框。但是,如果未选中至少一个复选框,则会取消选中网格标题中的复选框。
colNames : [ ,'<input type="checkbox" id="cbox" onclick="UI_PaxCheckin.checkBox(this,event)" />',..]
UI_PaxCheckin.checkBox = function(obj,e) {
e = e||event;
e.stopPropagation? e.stopPropagation() : e.cancelBubble = true;
var grid = $('#jqGridPax');
if(obj.checked == true){
UI_PaxCheckin.multiSelectedFlightRowID = [];
}
for ( var p = 0; p < grid[0].rows.length -1 ; p++) {
$('#chkIsSelected_' + p).prop('checked', obj.checked);
//manual checkbox click event function call
}
$('#cbox').prop('checked', obj.checked);}
答案 2 :(得分:2)
奇怪的是,API中似乎没有这样的功能。以编程方式选择“全选”复选框将触发选择所有代码(您可以在grid.base.js中找到,从第1053行开始。与手动选择单个行不同,这将正确触发onSelectAll事件。所以,是的,这是假设,但没有其他方式那么多。:/
答案 3 :(得分:1)
是的,这确实不是一种非常传统的方法,基本上就是你所说的你所做的,但我发现这是选择所有行的最简单方法,并且还选择了标题复选框:
var grid = $("#my_grid");
grid.resetSelection();
$('#cb_my_grid').click();
var ids = grid.getDataIDs();
for (var i=0, il=ids.length; i < il; i++ )
grid.setSelection(ids[i], false);
我认为,由于jqGrid底层实现,以编程方式单击标题复选框时,行不会被选中,就像你说的那样?我不知道它在底下的工作方式,但这对我来说似乎对我有用。
我想确保在我的网格中选中标题复选框的主要原因是用户可以下意识地确定是,网格中的所有行都是正确选择的(包括当前滚动视图下方不可见的行) ),而不必单击标题复选框以确保。
@Craig - 我必须尝试你的方法,它似乎更简单,更合理
答案 4 :(得分:1)
以编程方式选择“全选”复选框NOT ALWAYS触发全选代码。我们之前需要设置“checked”属性,因此将选择select all方法的正确分支。这是我在网格版3.8.1中使用的代码:
$("#cb_my_grid").attr("checked", true);
$("#cb_my_grid").trigger('click');
$("#cb_my_grid").attr("checked", true);
答案 5 :(得分:1)
实际点击全选复选框
的更好解决方案gridComplete: function(){
$(this).jqGrid('resetSelection');
$(this).closest(".ui-jqgrid").find(".ui-th-column:first .cbox").click();
}
或者您的网格ID是“mygrid”
$("#mygrid").jqGrid('resetSelection');
$("#cb_mygrid").click();