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
相关产品推荐
相关产品推荐

