"функция запроса не определена для ошибки Select2 undefined"

попытка использовать Select2 и получение этой ошибки на нескольких элементах ввода / текстового поля:

"query function not defined for Select2 undefined error"

12 ответов


охвачены в этой группе Google thread

проблема была из-за дополнительного div, который был добавлен select2. Select2 добавил новый div с классом "select2-container form-select", чтобы обернуть созданный выбор. Поэтому в следующий раз, когда я загрузил функцию, ошибка была вызвана, поскольку select2 был прикреплен к элементу div. Я сменил селектор...

префикс select2 css идентификатор с определенным именем тега "select":

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

это сообщение об ошибке слишком общего. Одним из других возможных источников является то, что вы пытаетесь вызвать select2() метод на уже" select2ed " вход.


Если вы инициализируете пустой вход, сделайте следующее:

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

прочитайте первый комментарий ниже, он объясняет, почему и когда вы должны использовать код в моем ответе.


У меня также была эта проблема, убедитесь, что вы не инициализируете select2 дважды.


для меня эта проблема сводилась к установке правильного атрибута 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 свойство on $scope.projectManagers Я получаю эту ошибку.


эта проблема сводилась к тому, как я строил окно выбора 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


Я также получил ту же ошибку при использовании ajax с текстовым полем, тогда я решаю ее с помощью удалить класс select2 текстового поля и setup select2 по id, как:

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

кажется, что ваш селектор возвращает неопределенный элемент (поэтому undefined error возвращается)

если элемент действительно существует, вы вызываете select2 на input элемент, не предоставляя ничего select2, откуда он должен извлекать данные. Как правило, один называет .select2({data: [{id:"firstid", text:"firsttext"}]).


также получил ту же ошибку при использовании ajax.

Если вы используете ajax для визуализации форм с select2, класс input_html должен отличаться от тех, которые не отображаются с помощью ajax. Не совсем уверен, почему это работает таким образом.


Я получил ту же ошибку. Я использую select2-3.5.2

Это был мой код, который уже ошибка

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

ниже кода Исправлена проблема.

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

у меня сложное веб-приложение, и я не мог понять, почему эта ошибка была выброшена. Это заставляло 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"));
        }

теперь все работает правильно, но он по-прежнему регистрируется в ошибке, если я хочу попытаться выяснить, что именно в моем коде вызывает ошибку. Но пока это достаточно хорошее решение для меня.


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

это бросается, потому что запрос не существует в параметрах. Внутренне поддерживается проверка, которая требует любого из следующих параметров

  • ajax
  • теги
  • сведения
  • запрос

Так что вам просто нужно предоставить один из этих 4 вариантов для select2 и он должен работать, как ожидалось.