Попытка использовать Select2 и получение этой ошибки при вводе нескольких элементов / текстовом поле:
"query function not defined for Select2 undefined error"
Попытка использовать Select2 и получение этой ошибки при вводе нескольких элементов / текстовом поле:
"query function not defined for Select2 undefined error"
Ответы:
Охвачено этой веткой группы Google
Проблема заключалась в дополнительном div, который добавлялся select2. Select2 добавил новый div с классом select2-container form-select, чтобы обернуть созданный выбор. Поэтому в следующий раз, когда я загрузил функцию, возникла ошибка, поскольку 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 по идентификатору, например:
$(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 вариантов для select2, и он должен работать должным образом.
У меня такая же ошибка. Я использовал 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) {
}