“未针对Select2未定义错误定义查询函数”

时间:2013-01-23 15:36:25

标签: javascript runtime-error jquery-select2

尝试使用Select2并在多个项目输入/文本字段上获取此错误:

"query function not defined for Select2 undefined error"

13 个答案:

答案 0 :(得分:225)

Covered in this google group thread

  

问题是因为s​​elect2添加了额外的div。 Select2添加了带有“select2-container form-select”类的新div来包装创建的select。因此,下次加载函数时,由于select2被附加到div元素,因此抛出了错误。我改变了选择器......

使用特定标记名称“select”的前缀select2 css标识符:

$('select.form-select').select2();

答案 1 :(得分:14)

此错误消息过于笼统。其他可能的来源之一是您尝试在已经“select2ed”输入上调用select2()方法。

答案 2 :(得分:12)

如果您初始化空输入,请执行以下操作:

$(".yourelement").select2({
 data: {
  id: "",
  text: ""
 }
});

阅读下面的第一条评论,它解释了为什么以及何时应该在我的答案中使用代码。

答案 3 :(得分:10)

我也有这个问题,请确保你没有两次初始化select2。

答案 4 :(得分:6)

对我来说,这个问题归结为设置正确的data-ui-select2属性:

<input type="text" data-ui-select2="select2Options.projectManagers" placeholder="Project Manager" ng-model="selectedProjectManager">


$scope.projectManagers = { 
  data: []  //Must have data property 
}

$scope.selectedProjectManager = {};

如果我取消data上的$scope.projectManagers属性,我会收到此错误。

答案 5 :(得分:5)

这个问题归结为我如何构建我的select2选择框。在一个javascript文件中我有...

$(function(){
  $(".select2").select2();
});

在另一个js文件中覆盖...

$(function(){
    var employerStateSelector = 
                $("#registration_employer_state").select2("destroy");
    employerStateSelector.select2({
    placeholder: 'Select a State...'
    });
});

将第二个覆盖移动到窗口加载事件中解决了问题。

$( window ).load(function() {
  var employerStateSelector = 
              $("#registration_employer_state").select2("destroy");
  employerStateSelector.select2({
    placeholder: 'Select a State...'
  });
});

这个问题在Rails应用程序中蓬勃发展

答案 6 :(得分:3)

我在使用ajax和文本框时也遇到了同样的错误然后我通过删除class select2 的文本框解决它,并通过id设置select2,如:

$(function(){
  $("#input-select2").select2();
});

答案 7 :(得分:2)

您的选择器似乎返回一个未定义的元素(因此返回undefined error

如果元素确实存在,则在input元素上调用select2而不向select2提供任何内容,它应从中获取数据。通常,一个人调用.select2({data: [{id:"firstid", text:"firsttext"}])

答案 8 :(得分:2)

使用ajax时也会出现同样的错误。

如果您使用ajax使用select2渲染表单,则input_html类必须与未使用ajax呈现的类不同。不太清楚为什么它会以这种方式工作。

答案 9 :(得分:0)

我得到了同样的错误。我一直在使用select2-3.5.2

这是我的代码有错误

    $('#carstatus-select').select2().val([1,2])

下面的代码解决了这个问题。

    $('#carstatus-select').val([1,2]);

答案 10 :(得分:0)

我有一个复杂的Web应用程序,我无法弄清楚为什么会抛出这个错误。它导致JavaScript在抛出时中止。

在select2.js中我改变了:

        if (typeof(opts.query) !== "function") {
            throw "query function not defined for Select2 " + opts.element.attr("id");
        }

为:

        if (typeof(opts.query) !== "function") {
            console.error("query function not defined for Select2 " + opts.element.attr("id"));
        }

现在一切似乎都正常工作但是我仍然记录错误,以防我想尝试找出我的代码中究竟是什么导致错误。但是现在这对我来说已经足够了。

答案 11 :(得分:0)

if (typeof(opts.query) !== "function") {
    throw "query function not defined for Select2 " + opts.element.attr("id");
}

由于选项中不存在查询,因此抛出此操作。在内部有一个维护检查,需要以下任一参数

  • AJAX
  • 标记
  • 数据
  • 查询

所以你只需要为select2提供这4个选项中的一个,它应该按预期工作。

答案 12 :(得分:-2)

使用:

try {
    $("#input-select2").select2();
}
catch(err) {

}