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

自定义Tom-Select模板后无法使用remove_button插件删除项的问题排查

问题

使用Tom-Select模板时遇到问题:默认模板下可通过Delete按钮删除选项,但自定义模板后无法删除任何项。tomSelect元素已存储在tomSelect变量中,DOM变更已生效,但没有删除用的叉号按钮。相关代码如下:

<select id="service-filter" name="service-filter" class="form-control" placeholder={{ 'forms.placeholder.service'|trans }} multiple="multiple" {{ stimulus_controller('symfony/ux-autocomplete/autocomplete', { url: path('get_services_and_customers', {}), }) }} ></select>
_onConnect(event) {

    const options = event.detail.options || {}; // Add default value for options
    const tomSelect = event.detail.tomSelect;

    tomSelect.settings.plugins = ["remove_button"];
    
    tomSelect.settings.render = {
        option: function(data, escape) {
            return '<div>' + '<span class="title">' + escape(data.text) + '</span>' + '</div>';
        },
        item: function(data, escape) {
            return '<div>' +  '<span class="title">' + escape(data.text) + '</span>' + '<a href="javascript:void(0)" class="remove" tabindex="-1" title="">×</a>' + '</div>';
        }
    }

}

希望自定义模板的同时,继续使用Tom-Select的remove_button插件,请问哪里操作有误?

解决方法

问题出在两个核心点:

  1. 直接修改tomSelect.settings不生效
    Tom-Select初始化完成后,直接修改settings对象不会触发插件或渲染逻辑的重新加载,必须用官方提供的updateSettings方法来更新配置。

  2. 自定义item模板与remove_button插件冲突
    remove_button插件会自动为每个选中项生成删除按钮并绑定事件,你手动在item模板里加的删除按钮没有关联Tom-Select的删除逻辑,同时直接覆盖settings.plugins的写法也可能破坏了插件的初始化流程。

修复后的代码:

_onConnect(event) {
    const tomSelect = event.detail.tomSelect;

    // 使用updateSettings更新配置,而非直接修改settings
    tomSelect.updateSettings({
        plugins: ['remove_button'],
        render: {
            option: function(data, escape) {
                return '<div><span class="title">' + escape(data.text) + '</span></div>';
            },
            // 自定义item样式,但删除按钮交给插件自动生成
            item: function(data, escape) {
                return '<div><span class="title">' + escape(data.text) + '</span></div>';
            }
        }
    });
}

如果一定要在自定义item模板里保留删除按钮的结构,需要确保按钮的类名和插件要求一致,并且手动绑定删除事件,但更推荐让插件自动处理,避免不必要的冲突。另外要注意Symfony UX Autocomplete的钩子时机,_onConnect是正确的操作节点,但必须用updateSettings来修改配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:14:56