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

Select2 v4.0.12输入空格时Ajax触发失败及JS报错求助

解决Select2 v4.0.12输入空格时搜索不触发且报错的问题

问题根源

报错Uncaught TypeError: i._removeOldTags is not a function是因为Select2默认的tokenSeparators包含空格(默认值为[',', ' ']),即使你设置了tags: false,输入空格时Select2仍会尝试触发标签分割的内部逻辑,但非标签模式下_removeOldTags方法不存在,导致报错;同时输入空格时若未达到minimumInputLength要求(你设的是2),搜索事件也不会触发。

解决方案

在Select2配置中添加tokenSeparators: [],禁用默认的分隔符,同时可根据需求调整输入参数的处理逻辑:

修改后的JavaScript代码

$("#ddlClients").select2({
    tags: false,
    multiple: false,
    minimumInputLength: 2,
    minimumResultsForSearch: 10,
    tokenSeparators: [], // 关键:禁用默认分隔符,避免触发标签逻辑
    language: {
        inputTooShort: function () {
            return 'Enter min 2 chars...';
        }
    },
    ajax: {
        url: '/MyController/GetClientsData',
        dataType: "json",
        type: "GET",
        data: function (params) {
            var queryParameters = {
                // 可选:若需忽略首尾空格,可改用params.term.trim()
                term: params.term
            };
            return queryParameters;
        },
        processResults: function (data) {
            return {
                results: $.map(data, function (item) {
                    return {
                        text: item.text,
                        id: item.id
                    };
                })
            };
        }
    }
});

额外说明

  1. 禁用tokenSeparators后,输入空格不会再触发标签相关的内部逻辑,彻底解决_removeOldTags未定义的报错。
  2. 若需要允许用户通过空格搜索包含空格的客户名称(比如"John Doe"),保持term: params.term即可,后台的GetDataFromMyDb方法需支持模糊匹配包含空格的关键词。
  3. 若想避免用户输入纯空格触发搜索,可在data函数中添加判断:
    data: function (params) {
        var trimmedTerm = params.term.trim();
        var queryParameters = {
            term: trimmedTerm
        };
        // 只有修剪后的长度符合要求时才传递参数
        return trimmedTerm.length >= 2 ? queryParameters : {};
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:45:12