"Función de consulta no definida para el error indefinido Select2"

121

Intentando usar Select2 y obteniendo este error en la entrada de múltiples elementos / campo de texto:

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

Respuestas:

241

Cubierto en este hilo del grupo de google

El problema se debió a la división adicional que agregaba select2. Select2 había agregado un nuevo div con la clase "select2-container form-select" para ajustar la selección creada. Entonces, la próxima vez que cargué la función, el error se lanzó cuando select2 se adjuntó al elemento div. Cambié mi selector ...

Prefijo select2 css identificador con el nombre de etiqueta específico "select":

$('select.form-select').select2();
Daniel Morris
fuente
de alguna manera lo arregló para mí, en mi caso estaba clonando una fila de entradas de formulario que incluía menús seleccionados select2-ified y todo tipo de cosas extrañas sucedían después del primer clon.
martincarlin87
También tiene que estar adentro$(document).ready(function() { $('select.form-select').select2()})
TED
1
¿Cómo se puede resolver el mismo problema en la directiva Angular UI Select2?
zavidovych
Acabo de encontrar este mismo problema hoy, aunque el mismo código anteriormente no tenía problemas (¿tal vez una actualización de select2?). De todos modos, esto también me resolvió y funcionó bien nuevamente. ¡Gran respuesta!
user756659
10
Este problema generalmente ocurre si el control de selección ya ha sido inicializado por el .select2({})método. Una mejor solución sería llamar primero al método de destrucción. Ej:$("#mySelectControl").select2("destroy").select2({});
Dmitry S.
18

Este mensaje de error es demasiado general. Una de sus otras fuentes posibles es que está intentando llamar al select2()método en una entrada ya "select2ed".

Martin D
fuente
13

En caso de que inicialice una entrada vacía, haga esto:

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

Lea el primer comentario a continuación, explica por qué y cuándo debe usar el código en mi respuesta.

kappaallday
fuente
2
Tuve este problema cuando migré un cuadro select2 de un elemento de selección real a un tipo de entrada = elemento oculto que estaba rellenando más tarde. Al recorrer el código select2, este error se produce porque no se pasa ningún valor de consulta, ajax, datos o etiquetas.
Daniel
1
Esta debería ser la respuesta aceptada para esta pregunta. No estoy seguro de por qué select2()no simplemente aceptamos parámetros vacíos
swdev
11

También tuve este problema, asegúrese de no inicializar el select2 dos veces.

Pedro Dias
fuente
lo mismo para mí, pero el error no fue un problema para mí. s2 funciona de todos modos
Reign.85
¿como hacer esto?
Khaled Saleh
7

Para mí, este problema se redujo a la configuración del atributo data-ui-select2 correcto:

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


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

$scope.selectedProjectManager = {};

Si me quito la datapropiedad $scope.projectManagers, aparece este error.

parlamento
fuente
5

Este problema se redujo a cómo estaba construyendo mi cuadro de selección select2. En un archivo javascript que tenía ...

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

Y en otro archivo js una anulación ...

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

Mover la segunda anulación a un evento de carga de ventana resolvió el problema.

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

Este problema surgió dentro de una aplicación Rails

keaplogik
fuente
4

También obtuve el mismo error cuando uso ajax con un cuadro de texto, luego lo resuelvo eliminando la clase select2 del cuadro de texto y configuro select2 por id como:

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

Parece que su selector devuelve un elemento indefinido (por lo tanto, undefined errorse devuelve)

En caso de que el elemento realmente exista, está llamando a select2 en un inputelemento sin proporcionar nada para seleccionar2, de donde debe obtener los datos. Por lo general, uno llama .select2({data: [{id:"firstid", text:"firsttext"}]).

koppor
fuente
2

También obtuve el mismo error al usar ajax.

Si está utilizando ajax para representar formularios con select2, la clase input_html debe ser diferente de las que NO se representan con ajax. Sin embargo, no estoy muy seguro de por qué funciona de esta manera.

mfamador
fuente
¿Quiere decir, "<input type = 'hidden' class = 'foo' ...." donde si tiene múltiples select2, no todos pueden ser 'foo'? Esto no funcionó para mí.
dethSwatch
1
if (typeof(opts.query) !== "function") {
    throw "query function not defined for Select2 " + opts.element.attr("id");
}

Esto se produce porque la consulta no existe en las opciones. Internamente se mantiene una verificación que requiere cualquiera de los siguientes parámetros

  • ajax
  • etiquetas
  • datos
  • consulta

Por lo tanto, solo debe proporcionar una de estas 4 opciones para select2 y debería funcionar como se espera.

Sahil Jain
fuente
0

Tengo el mismo error. He estado usando select2-3.5.2

Este era mi código que tenía error

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

El siguiente código solucionó el problema.

    $('#carstatus-select').val([1,2]);
Jyo Reddy
fuente
Usaría $ ('# carstatus-select'). Select2 ("val", [1,2]); como se menciona en los documentos
hakuna1811
0

Tengo una aplicación web complicada y no pude entender exactamente por qué se produjo este error. Estaba causando que el JavaScript abortara cuando se lanzaba.

En select2.js cambié:

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

a:

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

Ahora todo parece funcionar correctamente, pero todavía está registrando un error en caso de que quiera intentar averiguar qué exactamente en mi código está causando el error. Pero por ahora esta es una solución lo suficientemente buena para mí.

Luke Wenke
fuente
-2

utilizar :

try {
    $("#input-select2").select2();
}
catch(err) {

}
Mahdi Bagheri
fuente
esto solo ocultará el error, no lo solucionará. Esta no es una solución en la gran mayoría de los casos
Ramses