jqGrid filterToolbar搜索未排除隐藏列的问题求助
解决jqGrid 3.7.1隐藏列后filterToolbar仍搜索隐藏列的问题
jqGrid 3.7.1版本的hideCol方法仅会隐藏表头(ui-jqgrid-labels下的TH元素),不会同步处理filterToolbar对应的搜索栏(ui-search-toolbar下的TD元素),导致隐藏列的搜索输入框仍存在并参与搜索。以下是几种可行的解决方式:
方式一:手动同步隐藏搜索栏输入框
在调用hideCol隐藏列后,手动找到对应列的搜索输入框所在的TD元素并隐藏:
// 执行隐藏列操作 jQuery("#gridId").jqGrid('hideCol', ["Col5", "Col7", "Col9"]); // 遍历隐藏列名,同步隐藏搜索栏对应TD ["Col5", "Col7", "Col9"].forEach(function(colName) { jQuery("#gs_" + colName).closest('td').css('display', 'none'); });
方式二:扩展hideCol方法实现自动同步
通过扩展jqGrid的hideCol方法,让它在隐藏表头列的同时自动处理搜索栏的对应元素,后续调用hideCol时无需额外操作:
// 保存原hideCol方法 var originalHideCol = jQuery.jqGrid.prototype.hideCol; // 扩展hideCol方法 jQuery.jqGrid.prototype.hideCol = function(cols) { // 执行原生隐藏逻辑 originalHideCol.call(this, cols); // 处理单个列或列数组 var targetCols = typeof cols === 'string' ? [cols] : cols; var grid = this; targetCols.forEach(function(colName) { // 找到搜索栏中对应列的TD并隐藏 jQuery("#gs_" + colName, grid[0].grid.hDiv).closest('td').css('display', 'none'); }); return this; }; // 正常调用hideCol即可自动同步搜索栏 jQuery("#gridId").jqGrid('hideCol', ["Col5", "Col7", "Col9"]);
方式三:初始化filterToolbar后批量处理隐藏列搜索框
如果是在初始化filterToolbar之后才设置列隐藏,可以遍历列模型,批量隐藏对应隐藏列的搜索输入框:
// 初始化filterToolbar jQuery("#gridId").jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false}); // 获取列模型,批量处理隐藏列的搜索框 var grid = jQuery("#gridId"); var colModel = grid.getGridParam('colModel'); colModel.forEach(function(col) { if (col.hidden) { jQuery("#gs_" + col.name).closest('td').css('display', 'none'); } });
内容的提问来源于stack exchange,提问作者Posto
相关产品推荐
相关产品推荐

