"Функція запиту не визначена для невизначеної помилки Select2"


Відповіді:


241

Написано в цій темі групи Google

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

Префікс select2 css ідентифікатор з конкретним іменем тегу "select":

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

якимось чином виправив це для мене, в моєму випадку я клонував ряд входів форми, які включали вибрані меню select2, і всі інші дивні речі відбувалися після першого клонування.
— martincarlin87

Також має бути всередині$(document).ready(function() { $('select.form-select').select2()})
— TED,

1
Як таку ж проблему можна вирішити в директиві Angular UI Select2?
— завидович

Щойно зіткнувся з цією ж проблемою сьогодні, хоча раніше з тим самим кодом проблем не було (можливо, оновлення select2?). У всякому разі, це вирішило це і для мене, і знову добре працювало. Чудова відповідь!
— користувач756659

10
Ця проблема зазвичай виникає, якщо .select2({})метод вибору вже ініціалізований методом. Кращим рішенням буде спочатку викликати метод знищення. Напр .:$("#mySelectControl").select2("destroy").select2({});
— Дмитро С.

18

Це повідомлення про помилку занадто загальне. Одне з інших його можливих джерел - це те, що ви намагаєтеся викликати select2()метод на вже "select2ed" вході.


13

Якщо ви ініціалізуєте порожній вхід, зробіть це:

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

Прочитайте перший коментар нижче, він пояснює, чому і коли ви повинні використовувати код у моїй відповіді.


2
У мене була ця проблема, коли я перемістив поле select2 з фактичного елемента вибору на тип вводу = прихований елемент, який я заповнив пізніше. Під час переходу коду select2 ця помилка викидається, оскільки немає запиту, ajax, даних або знаків тегів, переданих.
— Даніель,

1
Це має бути прийнятою відповіддю на це питання. Не впевнений, чому select2()просто не прийматимуть порожні параметри
— swdev

11

У мене також була ця проблема, переконайтеся, що ви не ініціалізуєте select2 двічі.


те саме для мене, але помилка не була проблемою для мене. s2 працює так чи інакше
— царювання.85

як це зробити?
— khaled saleh

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 за id, наприклад:

$(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 варіантів для вибору2, і він повинен працювати так, як очікувалося.


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.