Попытка использовать 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 identifier с определенным именем тега "select":
$('select.form-select').select2();
Это сообщение об ошибке слишком общее. Одним из других возможных источников является то, что вы пытаетесь вызвать метод select2()
на уже выбранном "select2ed".
Если вы инициализируете пустой ввод, выполните следующие действия:
$(".yourelement").select2({
data: {
id: "",
text: ""
}
});
Прочитайте первый комментарий ниже, он объясняет, почему и когда вы должны использовать код в своем ответе.
У меня также была эта проблема, убедитесь, что вы не инициализируете 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 select box. В одном файле 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 (поэтому возвращается undefined error
)
В случае, если элемент действительно существует, вы вызываете select2 в элементе input
, не поставляя ничего для select2, откуда он должен извлекать данные. Обычно вызывается .select2({data: [{id:"firstid", text:"firsttext"}])
.
Также была получена такая же ошибка при использовании ajax.
Если вы используете ajax для визуализации форм с помощью select2, класс input_html должен отличаться от тех, которые не отображаются с помощью ajax. Не совсем уверен, почему он работает таким образом, хотя.
Я получил ту же ошибку. Я использовал 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"));
}
Теперь все работает нормально, но оно все еще регистрируется в ошибке, если я хочу попытаться выяснить, что именно в моем коде вызывает ошибку. Но пока это достаточно хорошо для меня.
if (typeof(opts.query) !== "function") {
throw "query function not defined for Select2 " + opts.element.attr("id");
}
Это отбрасывается, потому что в опциях не существует запроса. Внутри есть проверка, которая требует для параметра
Итак, вам просто нужно предоставить один из этих 4 вариантов select2, и он должен работать как ожидалось.