Drop down menu 如何在表更改时保存所选JS多选选项
嘿,每个人都有一个DataTable,我用它来显示一些数据,并尝试在下拉列表中加入所选的JS,以影响FE上向用户显示的内容。我能够让库正常工作并连接到DataTable没有问题,但现在我需要让其他列的下拉列表只反映从其他列中选择初始列后可用的内容。好消息是,我已经完成了一半的工作,但仍有一些问题需要解决Drop down menu 如何在表更改时保存所选JS多选选项,drop-down-menu,datatables,multi-select,jquery-chosen,prototype-chosen,Drop Down Menu,Datatables,Multi Select,Jquery Chosen,Prototype Chosen,嘿,每个人都有一个DataTable,我用它来显示一些数据,并尝试在下拉列表中加入所选的JS,以影响FE上向用户显示的内容。我能够让库正常工作并连接到DataTable没有问题,但现在我需要让其他列的下拉列表只反映从其他列中选择初始列后可用的内容。好消息是,我已经完成了一半的工作,但仍有一些问题需要解决 当我更新另一列时(假设我将列0设置为某个值,然后从列2中选择一个附加选项),第一个选定的项将从多重过滤器中删除。为了超级清除,表上的文件环仍然存在,但如果不再次单击col 0下拉列表查看它,选择
在这种情况下,如何在选定的multiselect中持久化该项
const updateDropdowns = (activated_selector, column) => {
console.log(activated_selector);
console.log($(activated_selector));
const tbl = $($(activated_selector).closest('table')[0]).dataTable();
const values = $(activated_selector)
.chosen()
.val()
.join('|');
column.search(values.length > 0 ? '^(' + values + ')$' : '', true, false).draw();
const dropDowns = $($(activated_selector).closest('table')[0]).find('select');
console.log('==============');
console.log(dropDowns);
console.log('==============');
const visibleDataApi = tbl
.api()
.rows({ filter: 'applied' })
.data()
.unique();
const visibleData = [];
for (let i = 0; i < visibleDataApi.length; i++) {
visibleData[i] = [];
for (let c = 0; c < visibleDataApi[i].length; c++) {
visibleData[i][c] = visibleDataApi[i][c];
}
}
$(dropDowns).each(function(index) {
const newData = [];
for (let i = 0; i < visibleData.length; i++) {
newData.push(visibleData[i][index]);
}
if (this === activated_selector) {
console.log('exiting');
// exit if its the one that we are actively changinging
$(this).trigger('chosen:updated');
return;
} else {
// we need to update the filter here
const distinctFilterData = newData
.filter((value, dex) => newData.indexOf(value) === dex)
.sort((a, b) => {
return a - b;
});
let newFilterOptions = `<option value=""></option>`;
for (let i = 0; i < distinctFilterData.length; i++) {
newFilterOptions += `<option value="${distinctFilterData[i]}">${distinctFilterData[i]}</option>`;
}
this.innerHTML = newFilterOptions;
$(this).trigger('chosen:updated');
let arr = [];
console.log(
'test',
$(
$(activated_selector)
.parent()
.children()
.children()
.find('li.search-choice')
.children()
// .children()
.each(function(dex) {
if (this.innerHTML) {
arr.push(this.innerHTML);
}
// arr.push($(this[dex]).innerHTML);
})
)
);
console.log(arr);
}
console.log('THIS', this);
const updateDropdowns=(已激活的选择器,列)=>{
控制台日志(激活的_选择器);
console.log($(已激活的_选择器));
const tbl=$($(已激活的_选择器).closest('table')[0]).dataTable();
常量值=$(已激活的\u选择器)
.selected()
.val()
.加入(“|”);
column.search(values.length>0?'^(“+values+”)$”:“”,true,false).draw();
常量下拉列表=$($(已激活的_选择器)。最近('table')[0])。查找('select');
console.log('===================');
console.log(下拉菜单);
console.log('===================');
常量visibleDataApi=tbl
.api()
.rows({filter:'applied'})
.data()
.unique();
常量visibleData=[];
for(设i=0;inewData.indexOf(值)==dex)
.排序((a,b)=>{
返回a-b;
});
让newFilterOptions=`;
for(设i=0;i
创建DataTable的我的代码:
$(document).ready(function() {
$('.select_box').chosen({
disable_search_threshold: 10,
no_results_text: 'Oops, nothing found!',
width: '95%',
});
});
// All this is inside my component
let tableFooter = '<tfoot><tr>';
for (let i = 0; i < repOverviewData.headers.length; i++) {
tableFooter += '<th style="padding-left:0px"></th>';
}
tableFooter += '</tr></tfoot>';
$('#rep-overview').append(tableFooter);
console.log(tableFooter);
const repOverviewTable = $('#rep-overview').DataTable({
columns: repOverviewData.headers,
data: repOverviewData.data,
// stateSave: true,
dom:
'<"row"<"col-sm-4"B><"col-sm-4 tabletitle"><"col-sm-4"f>>t<"row"<"col-sm-4"i><"col-sm-8"p>><"row"<"col-sm-12"l>>',
deferRender: true,
colReorder: true,
buttons: ['csv', 'colvis'],
lengthMenu: [
[10, 50, 100, -1],
[10, 50, 100, 'All'],
],
// scrollY: '200px',
scrollCollapse: true,
initComplete: function(settings, json) {
this.api()
.columns([0, 1, 2, 3])
.every(function() {
const column = this;
const select = $(
'<select multiple class="select_box" data-placeholder="Select Your Options"><option value=""></option></select>'
)
.appendTo($(column.footer()).empty())
.on('change', function() {
// const val = $.fn.dataTable.util.escapeRegex($(this).val());
// console.log(val);
// column.search(val ? '^' + val + '$' : '', true, false).draw();
updateDropdowns(this, column);
});
column
.data()
.unique()
.sort()
.each(function(d, j) {
select.append('<option value="' + d + '">' + d + '</option>');
});
});
},
});
$(文档).ready(函数(){
$('.选择框')。已选择({
禁用搜索阈值:10,
无结果文本:“哎呀,什么也找不到!”,
宽度:“95%”,
});
});
//所有这些都在我的组件中
让tableFooter='';
for(设i=0;i
<div className="table-header">Rep Overview</div>
<table
id="rep-overview"
className="table table-striped table-bordered row-border"
cellSpacing="0"
width="100%"
/>