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


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();

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".


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.


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.


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.


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


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();
});

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"}]).


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.


¿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.


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]);

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í.


-2

utilizar :

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

}

esto solo ocultará el error, no lo solucionará. Esta no es una solución en la gran mayoría de los casos
Ramses
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.