为什么我的制表程序自定义标头过滤器在键盘上更改?

问题描述 投票:0回答:1

复制:

  1. 运行代码段(推荐全页模式)
  2. 在单击以在表列标题中选择多个'种类'时,按住Ctrl或Shift
  3. 请注意,在按住键的同时,将根据所选的“种类”对表格数据进行过滤
  4. 释放键,观察过滤后的表数据中的更改

我认为这可能与https://github.com/olifolkerd/tabulator/issues/975有关,我需要做一些事情来覆盖默认的制表符按键事件。

JSFiddle:https://jsfiddle.net/jjech/3th28pv0/229/

const speciesTypes = [ 'Human', 'Android', 'Betazoid', 'Klingon', 'Ferengi', 'Tamarian' ];

function multiSelectHeaderFilter(cell) {

	var values = speciesTypes;

	const filterFunc = (rowData) => {
  	return values.includes(rowData['species']);
	}

  const getSelectedValues = (multiSelect) => {
    var result = [];
    var options = multiSelect && multiSelect.options;
    var opt;

    for (var i=0, iLen=options.length; i<iLen; i++) {
      opt = options[i];

      if (opt.selected) {
        result.push(opt.value || opt.text);
      }
    }
    return result;
  }

	const onChange = () => {
  	var editor = document.getElementById('speciesSelector');
    values = getSelectedValues(editor);
    console.log("values: "+values);
    cell.getColumn().getTable().removeFilter(filterFunc);
    cell.getColumn().getTable().addFilter(filterFunc);
  }

	var select = document.createElement("select");
  select.multiple = "multiple";
	select.id = 'speciesSelector';
  select.style = 'width: 100%';
  speciesTypes.forEach(species => { 
  	select.innerHTML += "<option id='"+species+"' value='"+species+"' selected='selected'>"+species+"</option>";
  });
  cell.getColumn().getTable().addFilter(filterFunc);
  select.addEventListener('change',onChange);
  return select;
}

var table = new Tabulator("#tabulator", {
	layout:"fitColumns",
	data:[ {name:'Geordi La Forge',species:'Human'}, {name:'Dathon', species:'Tamarian'}, {name:'Jean-Luc Picard', species:'Human'}, {name:'Worf, son of Mogh', species:'Klingon'}, {name:'Tasha Yarr', species:'Human'}, {name:'Data', species:'Android'}, {name:'Wesley Crusher', species:'Human'}, {name:'Jalad', species:'Tamarian'}, {name:'Lwaxana Troi', species:'Betazoid'}, {name:'Temba', species:'Tamarian'}, {name:'T\'Kuvma', species:'Klingon'}, {name:'Lore', species:'Android'}, {name:'Noonian Soongh', species:'Human'}, {name:'Darmok', species:'Tamarian'}, {name:'Reittan Grax', species:'Betazoid'}, {name:'Quark', species:'Ferengi'} ],
	headerSort:true,
	columns:[ {title:'Name',field:'name',sorter:'string'},{title:'Species',field:'species',sorter:'string',headerFilter:multiSelectHeaderFilter }, ],
});

//document.multiselect('#speciesSelector');
<html>
<head>
<link href="https://unpkg.com/[email protected]/dist/css/tabulator.min.css" rel="stylesheet">
<script type="text/javascript" src="https://unpkg.com/[email protected]/dist/js/tabulator.min.js"></script>
<link href="https://cdn.jsdelivr.net/gh/mneofit/multiselect/styles/multiselect.css" rel="stylesheet">
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/mneofit/multiselect/multiselect.min.js"></script>
<script></script>
<style>
.tabulator .tabulator-header,
.tabulator .tabulator-header .tabulator-col
{
  overflow: unset;
}
</style>
</head>
<body>
<div id="tabulator"></div>
</body>
</html>
tabulator
1个回答
0
投票

通过在列定义中添加headerFilterLiveFilter:false固定。

columns:[ {title:'Name',field:'name',sorter:'string'},{title:'Species',field:'species',sorter:'string',headerFilter:multiSelectHeaderFilter,headerFilterLiveFilter:false }, ],

https://jsfiddle.net/jjech/3th28pv0/237/

© www.soinside.com 2019 - 2024. All rights reserved.