«Функция запроса не определена для неопределенной ошибки Select2»


Ответы:


241

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

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

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

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

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

Также должно быть внутри$(document).ready(function() { $('select.form-select').select2()})
TED

1
Как можно решить ту же проблему в директиве Angular UI Select2?
zavidovych

Просто сегодня столкнулся с той же проблемой - хотя тот же код ранее не имел проблем (возможно, обновление select2?). В любом случае, это тоже решило эту проблему для меня и снова работало нормально. Отличный ответ!
user756659 03

10
Эта проблема обычно возникает, если элемент управления select уже был инициализирован .select2({})методом. Лучшим решением было бы сначала вызвать метод уничтожения. Пример:$("#mySelectControl").select2("destroy").select2({});
Дмитрий С.

18

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


13

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

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

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


2
У меня возникла эта проблема, когда я перенес поле select2 из фактического элемента select в элемент input type = hidden, который я заполнял позже. При пошаговом выполнении кода select2 возникает эта ошибка, потому что не передается значение запроса, ajax, данных или тегов.
Даниэль,

1
Это должен быть принятый ответ на этот вопрос. Не уверен, почему select2()просто не примет пустые параметры
swdev

11

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


То же самое для меня, но для меня ошибка не была проблемой. s2 все равно работает
Reign.85

как это сделать?
Халед Салех 07

7

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

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


4

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

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

3

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

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


2

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

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


Вы имеете в виду, например, "<input type = 'hidden' class = 'foo' ...." где, если у вас есть несколько select2, они не могут все быть 'foo'? У меня это не сработало.
dethSwatch

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

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

  • Аякса
  • теги
  • данные
  • запрос

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


0

У меня такая же ошибка. Я использовал select2-3.5.2

Это был мой код с ошибкой

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

Код ниже исправил проблему.

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

Я бы использовал $ ('# carstatus-select'). Select2 ("val", [1,2]); как упоминается в документации
hakuna1811

0

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

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


-2

использование:

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

}

это только скроет ошибку, но не исправит ее. Это не решение в подавляющем большинстве случаев
Рамзес
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.