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

Kendo UI Grid头部复选框无法全选所有行问题求助

Kendo UI Grid 头部复选框无法全选问题解决办法

以下是对应版本(2017.2.621)的问题根因和修复步骤:

  • 问题1:自定义绑定的点击事件选择器错误
    你当前Grid的Name属性设置为CommentGrid,对应DOM id是CommentGrid,而你绑定事件时用的选择器是$("#grid"),无法匹配到对应元素,且额外绑定自定义点击事件会和Grid自带的选择逻辑冲突,建议先删除这行自定义绑定代码。
  • 问题2:自定义onDataBound事件可能破坏选中逻辑
    你给Grid绑定了DataBound事件指向onDataBound函数,如果该函数内有重置行DOM、阻止事件冒泡、清空选中状态的逻辑,会导致全选失效,可调整onDataBound逻辑保留选中状态,示例:
function onDataBound(e) {
    var grid = e.sender;
    // 恢复之前缓存的选中状态
    var selectedIds = grid.selectedKeyNames();
    selectedIds.forEach(function(id) {
        var row = grid.table.find("tr[data-id='" + id + "']");
        row.find(".k-checkbox").prop("checked", true);
        row.addClass("k-state-selected");
    });
}
  • 问题3:2017.2.621版本自带全选逻辑兼容性问题
    如果删除自定义事件、调整onDataBound后仍然异常,可手动补充全选逻辑,代码如下:
// 页面加载完成后绑定头部复选框点击事件
$(function() {
    var grid = $("#CommentGrid").data("kendoGrid");
    // 绑定头部复选框点击事件
    grid.thead.on("click", ".k-checkbox", function(e) {
        var isChecked = $(this).is(":checked");
        // 遍历当前页所有行设置选中状态
        grid.tbody.find("tr").each(function() {
            var row = $(this);
            row.find(".k-checkbox").prop("checked", isChecked);
            if(isChecked) {
                row.addClass("k-state-selected");
            } else {
                row.removeClass("k-state-selected");
            }
        });
        // 同步选中id缓存,配合PersistSelection使用
        grid.select(grid.tbody.find("tr.k-state-selected"));
        e.stopImmediatePropagation();
    });
});

如果需要实现跨页全选,可额外维护全局选中ID数组,点击全选时遍历全部DataSource数据,将所有行ID存入selectedKeyNames对应的缓存即可。

内容的提问来源于stack exchange,提问作者Gökhan Aldanmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:39:00