"Функція запиту не визначена для невизначеної помилки 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.