You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决jqGrid多选模式下特定行的全选排除问题?

解决jqGrid全选时选中无复选框行的问题

你的beforeSelectRow仅能拦截单行点击选择的操作,但全选按钮的默认逻辑会直接遍历所有行执行选中,不会触发该事件,因此需要重写全选按钮的点击逻辑,同时优化行的判断方式,具体方案如下:

步骤1:给不可选中的行添加专属标记

在loadComplete中给天蓝色区域的行添加unselectable-row类,同时移除复选框,用class判断比硬编码列索引更可靠:

jQuery("#grid").jqGrid({
    datatype: "local",
    width:'auto',
    height: 'auto',     
    multiselect:true,
    colNames:[
        'no'
    ],
    colModel:[
        {name:'no', align:'right', width:70}
    ],  
    beforeSelectRow: function(rowid, e) {
        // 通过class判断是否允许选中
        return !$("#" + rowid).hasClass("unselectable-row");
    },
    loadComplete: function(data) {          
        $("#grid").parents('div.ui-jqgrid-bdiv').css("max-height","250px");
        // 遍历行,标记不可选中的行并移除复选框
        $("#grid>tbody tr").each(function() {
            var $row = $(this);
            // 替换成你的行判断逻辑
            if ($row.children().eq(3).text() !== "unused") {
                $row.addClass("unselectable-row");
                $row.find('input[type="checkbox"]').remove();
            }
        });
    },
}); 

步骤2:重写全选按钮的点击事件

全选按钮的ID为grid_cb(grid是你的表格ID),拦截它的默认点击行为,只选中允许选中的行:

$(function() {
    $("#grid_cb").on("click", function(e) {
        e.preventDefault();
        var isCheckAll = $(this).is(":checked");
        // 只操作未标记为不可选中的行
        $("#grid>tbody tr:not(.unselectable-row)").each(function() {
            var rowId = $(this).attr("id");
            if (isCheckAll) {
                $("#grid").jqGrid("setSelection", rowId, true);
            } else {
                $("#grid").jqGrid("resetSelection", rowId);
            }
        });
        // 同步全选按钮的选中状态
        $(this).prop("checked", isCheckAll);
    });
});

补充说明

  • 避免使用eq(3)这种硬编码列索引的方式,后续列结构变化会导致判断失效,建议改用列名取值,比如$row.find("[aria-describedby='grid_no']").text()(grid_no为表格ID+列名)。
  • 重写全选逻辑时,需同步全选按钮的状态,避免出现按钮状态与实际选中状态不一致的情况。

内容的提问来源于stack exchange,提问作者JeonYongWook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:31:01