"Fonction de requête non définie pour Select2 undefined error"

Essayer d'utiliser Select2 et obtenir cette erreur sur le champ d'entrée / texte de plusieurs éléments:

"query function not defined for Select2 undefined error" 

Couvert dans ce fil de groupe google

Le problème était dû à la division supplémentaire ajoutée par select2. Select2 a ajouté de nouvelles div avec la classe "select2-container form-select" pour envelopper la sélection créée. Donc, la prochaine fois que j'ai chargé la fonction, l'erreur a été lancée alors que select2 était attaché à l'élément div. J'ai changé mon sélecteur …

Prefix select2 identifiant css avec le nom de la marque spécifique "select":

 $('select.form-select').select2(); 

Ce message d'erreur est trop général. L'une de ses autres sources possibles est que vous essayez d'appeler la méthode select2() sur l'entrée déjà "select2ed".

Dans le cas où vous initialisez une entrée vide, procédez comme suit:

 $(".yourelement").select2({ data: { id: "", text: "" } }); 

Lisez le premier commentaire ci-dessous, cela explique pourquoi et quand vous devriez utiliser le code dans ma réponse.

J'ai également eu ce problème pour vous assurer que vous n'initialisez pas le select2 deux fois.

Pour moi, ce problème est limité à la définition de l'attribut data-ui-select2 correct:

 <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 retire la propriété de data sur $scope.projectManagers j'obtiens cette erreur.

Ce problème s'est déroulé sur 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 deuxième 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 développé dans une application Rails

J'ai également eu la même erreur lors de l'utilisation d'ajax avec une boîte de texte, je la résolais en supprimant la classe select2 de la boîte de texte et la configuration select2 par id like:

 $(function(){ $("#input-select2").select2(); }); 

Il semble que votre sélecteur renvoie un élément indéfini (Par conséquent, l' undefined error est renvoyée)

Dans le cas où l'élément existe vraiment, vous appelez select2 sur un élément de input sans fournir quoi que ce soit à select2, d'où il devrait récupérer les données. Typiquement, on appelle .select2({data: [{id:"firstid", text:"firsttext"}]) .

A également eu la même erreur lors de l'utilisation d'ajax.

Si vous utilisez ajax pour générer des formulaires avec select2, la classe input_html doit être différente de celles non rendues à l'aide d'ajax. Pas tout à fait sûr de la raison pour laquelle cela fonctionne de cette façon.

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 a corrigé le problème.

  $('#carstatus-select').val([1,2]); 

J'ai une application Web compliquée et je ne pouvais pas comprendre exactement pourquoi cette erreur était lancé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 il enregistre toujours une erreur dans le cas où je veux essayer de comprendre ce que ce code exactement provoque l'erreur. Mais pour l'instant, c'est un correctif assez bon pour moi.

 if (typeof(opts.query) !== "function") { throw "query function not defined for Select2 " + opts.element.attr("id"); } 

Ceci est éjecté parce que la requête n'existe pas dans les options. En interne, il existe une vérification qui nécessite l'un des paramètres suivants pour les paramètres

  • Ajax
  • Mots clés
  • Les données
  • question

Vous devez donc fournir une de ces 4 options à select2 et cela devrait fonctionner comme prévu.