使用Select2插件遇TypeError: g is undefined错误,求解决方案
解决Select2插件「TypeError: g is undefined」错误
我帮你排查了下这个问题,结合你给出的代码和JSON响应,几个小细节的问题可能导致了这个报错:
问题分析
tags参数类型错误:你设置的是tags: "true"(字符串类型),但Select2要求这个参数是布尔值true/false,字符串类型会干扰插件内部逻辑,引发异常。templateResult中HTML结构不完整:你拼接的markup里<span>标签没有闭合,残缺的HTML会让Select2渲染时出错,进而触发这类minified代码里的模糊报错。- 可选优化:避免全局变量污染:在
templateSelection里直接给userId赋值,会污染全局作用域,建议改用局部变量或其他方式存储。
修正后的完整代码
$('#medicine_id').select2({ tags: true, // 改为布尔值类型 placeholder: "Medicine", ajax: { url: '/medicinename', dataType: 'json', delay: 200, data: function(params) { return { q: params.term, }; } }, minimumInputLength: 3, templateResult: function(repo) { if (repo.loading) return repo.text; // 补全闭合的span标签,统一写法让代码更整洁 var markup = '<div><span style="margin-left:10px;">' + repo.text + '</span></div>'; return markup; }, templateSelection: function(repo) { // 改用局部变量存储,避免全局污染 const userId = repo.id; return repo.text; }, escapeMarkup: function(markup) { return markup; } });
额外说明
你的JSON响应格式是完全符合Select2要求的(包含id和text核心字段),这部分没问题。修改后应该就能解决「g is undefined」的报错了,如果还有问题,可以检查下页面是否正确引入了jQuery和Select2的依赖,并且确保DOM元素#medicine_id在代码执行前已经加载完成(比如把代码放在$(document).ready()回调里)。
内容的提问来源于stack exchange,提问作者mc160201376 Ahtisham Shahid
相关产品推荐
相关产品推荐

