Essayer d'utiliser Select2 et obtenir cette erreur sur plusieurs champs de saisie/texte:
"query function not defined for Select2 undefined error"
Couvert dans ce fil de groupe Google
Le problème était dû au supplément supplémentaire ajouté par le select2. Select2 avait ajouté un nouveau div avec la classe "select2-container form-select" pour envelopper la sélection créée. Ainsi, la prochaine fois que j'ai chargé la fonction, l'erreur a été générée car select2 était associé à l'élément div. J'ai changé de sélecteur ...
Le préfixe select2 identifiant css avec le nom de balise spécifique "select":
$('select.form-select').select2();
Ce message d'erreur est trop général. Une de ses autres sources possibles est que vous essayez d’appeler la méthode select2()
sur une entrée déjà "sélectionnée".
Si vous initialisez une entrée vide, procédez comme suit:
$(".yourelement").select2({
data: {
id: "",
text: ""
}
});
Lisez le premier commentaire ci-dessous, il explique pourquoi et quand vous devriez utiliser le code dans ma réponse.
J'ai également eu ce problème, assurez-vous que vous n'initialisez pas le select2 deux fois.
Pour moi, ce problème se résumait à définir le bon attribut 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 = {};
Si je supprime la propriété data
sur $scope.projectManagers
, j'obtiens cette erreur.
Ce problème se résumait à la façon dont je construisais ma boîte de sélection select2. Dans un fichier javascript, j'avais ...
$(function(){
$(".select2").select2();
});
Et dans un autre fichier js, un remplacement ...
$(function(){
var employerStateSelector =
$("#registration_employer_state").select2("destroy");
employerStateSelector.select2({
placeholder: 'Select a State...'
});
});
Le déplacement de la seconde substitution dans un événement de chargement de fenêtre a résolu le problème.
$( window ).load(function() {
var employerStateSelector =
$("#registration_employer_state").select2("destroy");
employerStateSelector.select2({
placeholder: 'Select a State...'
});
});
Ce problème s'est épanoui au sein d'une application Rails
J'ai également eu la même erreur lors de l'utilisation d'ajax avec une zone de texte, puis je le résoudre par remove class select2 of textbox et le programme d'installation select2 par id comme
$(function(){
$("#input-select2").select2();
});
Également eu la même erreur lorsque vous utilisez ajax.
Si vous utilisez ajax pour rendre les formulaires avec select2, la classe input_html doit être différente de celles NON rendues avec ajax. Vous ne savez pas très bien pourquoi cela fonctionne de cette façon.
Il semble que votre sélecteur retourne un élément indéfini (par conséquent, undefined error
est renvoyé)
Au cas où l'élément existe réellement, vous appelez select2 sur un élément input
sans rien fournir à select2, d'où il doit extraire les données. Généralement, on appelle .select2({data: [{id:"firstid", text:"firsttext"}])
.
J'ai eu la même erreur. J'ai utilisé select2-3.5.2
C'était mon code qui avait une erreur
$('#carstatus-select').select2().val([1,2])
Le code ci-dessous corrige le problème.
$('#carstatus-select').val([1,2]);
if (typeof(opts.query) !== "function") {
throw "query function not defined for Select2 " + opts.element.attr("id");
}
Ceci est levé parce que la requête n'existe pas dans les options. En interne, une vérification est maintenue, qui nécessite l'une des opérations suivantes pour les paramètres.
Il vous suffit donc de fournir l’une de ces 4 options pour sélectionner2 et cela devrait fonctionner normalement.
J'ai une application Web compliquée et je ne pouvais pas comprendre exactement pourquoi cette erreur était générée. Cela provoquait l'avortement du JavaScript lorsqu'il était lancé.
Dans select2.js j'ai changé:
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"));
}
Maintenant, tout semble fonctionner correctement, mais le système enregistre toujours une erreur au cas où je voudrais essayer de déterminer ce qui, dans mon code, est à l'origine de l'erreur. Mais pour l’instant, c’est une bonne solution pour moi.