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

