webentwicklung-frage-antwort-db.com.de

"Abfragefunktion für Select2 undefined Fehler nicht definiert"

Der Versuch, Select2 zu verwenden, und dieser Fehler wird in einem Eingabe/Textfeld für mehrere Elemente angezeigt:

"query function not defined for Select2 undefined error"
114
Daniel Morris

In diesem Google-Gruppen-Thread behandelt

Das Problem war auf das zusätzliche div zurückzuführen, das von select2 hinzugefügt wurde. Select2 hatte ein neues div mit der Klasse "select2-container form-select" hinzugefügt, um die erstellte Auswahl umzukehren. Beim nächsten Laden der Funktion wurde der Fehler ausgelöst, als select2 an das div-Element angehängt wurde. Ich habe meine Auswahl geändert ...

Select2 css-ID mit dem spezifischen Tag-Namen "select" voranstellen:

$('select.form-select').select2();
222
Daniel Morris

Diese Fehlermeldung ist zu allgemein. Eine andere mögliche Quelle ist, dass Sie versuchen, die select2()-Methode bereits für die Eingabe "select2ed" aufzurufen.

14
Martin D

Falls Sie eine leere Eingabe initialisieren, gehen Sie folgendermaßen vor:

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

Lesen Sie den ersten Kommentar unten. Er erläutert, warum und wann Sie den Code in meiner Antwort verwenden sollten.

11
kappaallday

Ich hatte dieses Problem auch sichergestellt, dass Sie select2 nicht zweimal initialisieren. 

10
Pedro Dias

Bei mir ging es darum, das richtige Attribut data-ui-select2 zu setzen:

<input type="text" data-ui-select2="select2Options.projectManagers" placeholder="Project Manager" ng-model="selectedProjectManager">


$scope.projectManagers = { 
  data: []  //Must have data property 
}

$scope.selectedProjectManager = {};

Wenn ich die data-Eigenschaft von $scope.projectManagers entferne, erhalte ich diese Fehlermeldung.

5
parliament

Dieses Problem ging darauf zurück, wie ich meine select2-Auswahlbox baute. In einer Javascript-Datei hatte ich ...

$(function(){
  $(".select2").select2();
});

Und in einer anderen js-Datei eine Überschreibung ...

$(function(){
    var employerStateSelector = 
                $("#registration_employer_state").select2("destroy");
    employerStateSelector.select2({
    placeholder: 'Select a State...'
    });
});

Durch das Verschieben der zweiten Überschreibung in ein Fensterlastereignis wurde das Problem behoben.

$( window ).load(function() {
  var employerStateSelector = 
              $("#registration_employer_state").select2("destroy");
  employerStateSelector.select2({
    placeholder: 'Select a State...'
  });
});

Dieses Problem hat sich in einer Rails-Anwendung entwickelt

5
keaplogik

Ich habe auch die gleiche Fehlermeldung erhalten, wenn ich ajax mit einem Textfeld verwende. Dann löse ich es durch remove class select2 von textbox und setze select2 nach id wie

$(function(){
  $("#input-select2").select2();
});
3
Hoàng Nghĩa

Bekam den gleichen Fehler bei der Verwendung von Ajax.

Wenn Sie ajax zum Rendern von Formularen mit select2 verwenden, muss sich die input_html-Klasse von der Klasse unterscheiden, die nicht mit ajax gerendert wurde. Nicht ganz sicher, warum es so funktioniert.

2
mfamador

Es scheint, dass Ihr Selektor ein undefiniertes Element zurückgibt (daher wird undefined error zurückgegeben)

Falls das Element wirklich vorhanden ist, rufen Sie select2 für ein input-Element auf, ohne etwas an select2 anzugeben, von dem es die Daten abrufen soll. Normalerweise ruft man .select2({data: [{id:"firstid", text:"firsttext"}]) auf.

2
koppor

Ich habe den gleichen Fehler bekommen. Ich habe select2-3.5.2 verwendet

Dies war mein Code, der einen Fehler hatte

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

Der folgende Code hat das Problem behoben.

    $('#carstatus-select').val([1,2]);
0
if (typeof(opts.query) !== "function") {
    throw "query function not defined for Select2 " + opts.element.attr("id");
}

Dies wird ausgelöst, da die Abfrage nicht in Optionen vorhanden ist. Intern wird eine Überprüfung durchgeführt, bei der die folgenden Parameter erforderlich sind

  • ajax
  • stichworte
  • daten
  • abfrage

Sie müssen also nur eine dieser 4 Optionen für select2 angeben, und es sollte wie erwartet funktionieren.

0
Sahil Jain

Ich habe eine komplizierte Web-App und konnte nicht genau herausfinden, warum dieser Fehler ausgelöst wurde. Dies führte dazu, dass JavaScript abgebrochen wurde, wenn es geworfen wurde.

In select2.js habe ich Folgendes geändert:

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

zu:

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

Jetzt scheint alles richtig zu funktionieren, aber es wird immer noch ein Fehler protokolliert, falls ich herausfinden möchte, was genau in meinem Code den Fehler verursacht. Aber für jetzt ist das eine gute Lösung für mich.

0
Luke Wenke