DataTables基于前两级下拉选择联动填充第三级下拉菜单问题
修复思路
原来的rebuildIDSelect仅提取当前搜索结果下ID列的去重值,只要ID出现在任意一个选中HR的行中就会被展示,没有校验ID是否关联了所有已选的HR值,所以导致不符合要求的ID也出现在选项里。
修改后的rebuildIDSelect代码
function rebuildIDSelect() { var select = $('#id_select select').empty().append('<option value=""></option>'); // 获取所有已选的HR值 var selectedHrs = $('#hr_s').val() || []; var column = table.column(1, {search: 'applied'}); if (selectedHrs.length === 0) { // 未选择HR时沿用原有逻辑,展示所有符合项目筛选的ID column.data().unique().sort().each(function(val) { select.append('<option value="' + val + '">' + val + '</option>'); }); return; } // 统计每个ID关联的HR去重集合 var idHrMap = {}; table.rows({search: 'applied'}).every(function() { var rowData = this.data(); var id = rowData.ID; var hr = rowData.HR; if (!idHrMap[id]) idHrMap[id] = new Set(); idHrMap[id].add(hr); }); // 筛选出关联HR覆盖所有已选HR的ID var validIds = Object.keys(idHrMap).filter(function(id) { return selectedHrs.every(function(hr) { return idHrMap[id].has(hr); }); }).sort(); // 生成下拉选项 validIds.forEach(function(val) { select.append('<option value="' + val + '">' + val + '</option>'); }); }
额外调整项
需要同时删除rebuildPositionSelect和rebuildIDSelect函数中原有的column.search('').draw();代码,这行代码会清空已选中的筛选条件,导致联动逻辑失效。
内容的提问来源于stack exchange,提问作者dfahsjdahfsudaf
相关产品推荐
相关产品推荐

