Спроба використовувати Select2 та отримувати цю помилку в декількох елементах введення / текстовому полі:
"query function not defined for Select2 undefined error"
Спроба використовувати Select2 та отримувати цю помилку в декількох елементах введення / текстовому полі:
"query function not defined for Select2 undefined error"
Відповіді:
Написано в цій темі групи Google
Проблема була через додатковий div, який додав select2. Select2 додав новий div з класом "select2-контейнер-форма-вибір", щоб завершити створений вибір. Отже, наступного разу, коли я завантажував функцію, помилка була викинута, як select2 додається до елемента div. Я змінив селектора ...
Префікс select2 css ідентифікатор з конкретним іменем тегу "select":
$('select.form-select').select2();
$(document).ready(function() { $('select.form-select').select2()})
.select2({})
метод вибору вже ініціалізований методом. Кращим рішенням буде спочатку викликати метод знищення. Напр .:$("#mySelectControl").select2("destroy").select2({});
Якщо ви ініціалізуєте порожній вхід, зробіть це:
$(".yourelement").select2({
data: {
id: "",
text: ""
}
});
Прочитайте перший коментар нижче, він пояснює, чому і коли ви повинні використовувати код у моїй відповіді.
select2()
просто не прийматимуть порожні параметри
У мене також була ця проблема, переконайтеся, що ви не ініціалізуєте 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
власність, $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 з текстового поля та встановивши select2 за id, наприклад:
$(function(){
$("#input-select2").select2();
});
Здається, що ваш селектор повертає невизначений елемент (тому undefined error
повертається)
У випадку, якщо елемент дійсно існує, ви викликаєте select2 на input
елементі, не подаючи нічого на select2, звідки він повинен отримати дані. Як правило, один дзвінок .select2({data: [{id:"firstid", text:"firsttext"}])
.
Також отримали таку ж помилку при використанні ajax.
Якщо ви використовуєте ajax для візуалізації форм за допомогою select2, клас input_html повинен відрізнятися від клавіш, які НЕ відображаються за допомогою ajax. Не зовсім впевнений, чому це працює саме так.
if (typeof(opts.query) !== "function") {
throw "query function not defined for Select2 " + opts.element.attr("id");
}
Цей закидний запит не існує в параметрах. Всередині існує перевірка, яка вимагає будь-якого з наведених нижче параметрів
Тож вам просто потрібно надати один із цих 4 варіантів для вибору2, і він повинен працювати так, як очікувалося.
Я отримав таку ж помилку. Я використовую 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"));
}
Зараз, здається, все працює належним чином, але він все ще входить в помилку, якщо я хочу спробувати і з'ясувати, що саме в моєму коді викликає помилку. Але наразі це досить хороший виправлення для мене.
використання:
try {
$("#input-select2").select2();
}
catch(err) {
}