"query function not defined for Select2 undefined error"

JavascriptRuntime ErrorJquery Select2

Javascript Problem Overview


Trying to use Select2 and getting this error on multiple item input/text field:

"query function not defined for Select2 undefined error"

Javascript Solutions


Solution 1 - Javascript

Covered in this google group thread

> The problem was because of the extra div that was being added by the select2. Select2 had added new div with class "select2-container form-select" to wrap the select created. So the next time i loaded the function, the error was being thrown as select2 was being attached to the div element. I changed my selector...

Prefix select2 css identifier with specific tag name "select":

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

Solution 2 - Javascript

This error message is too general. One of its other possible sources is that you're trying to call select2() method on already "select2ed" input.

Solution 3 - Javascript

In case you initialize an empty input do this:

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

Read the first comment below, it explains why and when you should use the code in my answer.

Solution 4 - Javascript

I also had this problem make sure that you don't initialize the select2 twice.

Solution 5 - Javascript

For me this issue boiled down to setting the correct data-ui-select2 attribute:

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


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

$scope.selectedProjectManager = {};

If I take off the data property on $scope.projectManagers I get this error.

Solution 6 - Javascript

This issue boiled down to how I was building my select2 select box. In one javascript file I had...

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

And in another js file an override...

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

Moving the second override into a window load event resolved the issue.

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

This issue blossomed inside a Rails application

Solution 7 - Javascript

I also got the same error when using ajax with a textbox then i solve it by remove class select2 of textbox and setup select2 by id like:

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

Solution 8 - Javascript

It seems that your selector returns an undefined element (Therefore undefined error is returned)

In case the element really exists, you are calling select2 on an input element without supplying anything to select2, where it should fetch the data from. Typically, one calls .select2({data: [{id:"firstid", text:"firsttext"}]).

Solution 9 - Javascript

Also got the same error when using ajax.

If you're using ajax to render forms with select2, the input_html class must be different from those NOT rendered using ajax. Not quite sure why it works this way though.

Solution 10 - Javascript

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

This is thrown becase query does not exist in options. Internally there is a check maintained which requires either of the following for parameters

  • ajax
  • tags
  • data
  • query

So you just need to provide one of these 4 options to select2 and it should work as expected.

Solution 11 - Javascript

I got the same error. I have been using select2-3.5.2

This was my code which had error

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

Below code fixed the issue.

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

Solution 12 - Javascript

I have a complicated Web App and I couldn't figure out exactly why this error was being thrown. It was causing the JavaScript to abort when thrown.

In select2.js I changed:

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

to:

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

Now everything seems to work properly but it is still logging in error in case I want to try and figure out what exactly in my code is causing the error. But for now this is a good enough fix for me.

Solution 13 - Javascript

use :

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDaniel MorrisView Question on Stackoverflow
Solution 1 - JavascriptDaniel MorrisView Answer on Stackoverflow
Solution 2 - JavascriptMartin DView Answer on Stackoverflow
Solution 3 - JavascriptStarmetalView Answer on Stackoverflow
Solution 4 - JavascriptPedro DiasView Answer on Stackoverflow
Solution 5 - JavascriptparliamentView Answer on Stackoverflow
Solution 6 - JavascriptkeaplogikView Answer on Stackoverflow
Solution 7 - JavascriptNick HoàngView Answer on Stackoverflow
Solution 8 - JavascriptkopporView Answer on Stackoverflow
Solution 9 - JavascriptmfamadorView Answer on Stackoverflow
Solution 10 - JavascriptSahil JainView Answer on Stackoverflow
Solution 11 - JavascriptJyo ReddyView Answer on Stackoverflow
Solution 12 - JavascriptLuke WenkeView Answer on Stackoverflow
Solution 13 - JavascriptMahdi BagheriView Answer on Stackoverflow