You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tabulator表头过滤器集成Select2无响应问题排查与解决

问题:Tabulator自定义Select2表头过滤器选择选项无响应

技术栈

  • ruby - 2.7.6
  • rails - 6.1.5
  • tabulator - 5.4.3
  • jquery-rails gem - 4.4.0
  • jquery-ui-rails gem - 6.0.1
  • select2-rails gem - 3.5.11

问题详情

我尝试将Select2作为Tabulator的自定义表头过滤器(headerFilter)实现数据筛选,目前Select字段及选项能正常渲染,但选择选项时完全没有筛选反应,Select2的各类事件也未触发。

预期效果

用Select2库替换Tabulator默认的内置列表编辑器,作为表头过滤器使用。

已执行操作

从后端获取Select字段所需选项数据,传入Select2构造器,再将完整的Select2组件插入表头过滤器位置。

当前结果

Select2搜索框可正常显示和输入搜索,但选择选项后无法触发表头筛选动作,控制台输出以下警告:

[Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive.

相关代码

列配置

{
  title: 'Items',
  field: 'item_name',
  headerFilter: selectEditor,
  headerSort: false
},

自定义Select2编辑器函数

var selectEditor = function(cell, onRendered, success, cancel, editorParams){
  // 创建容器和input元素承载Select2
  var container = document.createElement("span");
  var editor = document.createElement("input");
  container.append(editor);

  onRendered(function(){
    $(editor).select2({
      data: [{text: 'hi', value: '1'}],
      multiple: false,
      width: '100%',
      allowClear: true
    });

    // 绑定各类事件尝试触发筛选
    $(editor).on('change', function (e) {
      console.log($(editor).val());
      success($(editor).val());
    });

    $(editor).on('change.select2', function (e) {
      console.log($(editor).val());
      success($(editor).val());
    });

    $(editor).on('select2:select', function (e) {
      console.log($(editor).val());
      success($(editor).val());
    });

    $(editor).on('blur', function (e) {
      console.log('blurred');
      cancel();
    });

    $(editor).on('click', function (e) {
      console.log('clicked');
      cancel();
    });
    container.focus();
  });
  return container;
}

更新发现

设置headerFilterLiveFilter:false可以阻止列表自动补全时的重绘事件(需配合clearable样式),此时使用默认list过滤器的列配置如下:

{
  title: 'Items',
  field: 'item_name',
  headerFilter: 'list',
  headerFilterPlaceholder: 'Item name',
  headerSort: true,
  headerFilterLiveFilter:false,
  headerFilterParams: {
    clearable: true,
    values: {
      '': 'All',
      'Item1': 'Item One',
      'Item2': 'Item Two'
    },
  },
}

内容的提问来源于stack exchange,提问作者silentM0de

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:56:35