jquery autocompletar this.source no es un error de función

4 minutos de lectura

avatar de usuario
jaap rood

Implementé el autocompletado en un campo de entrada, pero el cuadro no aparece y Firebug devuelve “this.source no es una función”. He usado autocompletar en otros campos de la misma página sin ningún problema. (dos áreas de texto).

Estoy usando el siguiente código para depurar, el mismo efecto si ejecuto desde un archivo de script o desde la línea de comandos de Firebug.

var fakedata = ['test1','test2','test3','test4','ietsanders'];
$("#omschrijving").autocomplete(fakedata);

ejecutando jquery 1.4.2 y jquery ui 1.8.2, ambas versiones minimizadas.

¿Alguien tiene una idea de cómo la función de autocompletar funciona bien en las áreas de texto, pero provoca un mal funcionamiento en las entradas?

Rastreo de error y pila:

this.source is not a function
http://facturatie.autodealers.nl/dev/resources/js/jquery-ui-1.8.2.custom.min.js
Line 570
close(Object { name="a"})jquery....min.js (regel 570)
close(Object { name="a"}, Object { name="c"})jquery....min.js (regel 570)
response()

  • ¿Qué complemento de autocompletar estás usando? Hay varias variantes.

    – Puntiagudo

    22 de julio de 2010 a las 12:47

  • ¿Podría activar el seguimiento de la pila en Firebug y publicar la función en la que ocurrió esto?

    – Maz

    22 de julio de 2010 a las 12:47

  • Estoy usando el autocompletado de jQuery UI como se incluye en la versión 1.8.2 de la biblioteca de jQuery UI. trabajando en el seguimiento de la pila

    – JaapRod

    22 de julio de 2010 a las 12:49

  • Y encontré la respuesta, casi avergonzado de admitir que simplemente lo implementé de manera incorrecta.

    – JaapRod

    22 de julio de 2010 a las 12:57

La respuesta es que el primer parámetro de la función de autocompletar debe ser un objeto que contenga la propiedad “fuente”. Esto funciona

var fakedata = ['test1','test2','test3','test4','ietsanders'];
$("#omschrijving").autocomplete({source:fakedata});

  • no es tan vergonzoso, ya que dice diferente en alguna documentación. ¿Cómo adivinar?

    – Itay Moav-Malimovka

    7 de diciembre de 2011 a las 16:43

  • Además, es posible que vea este error o similar si source es un objeto con llaves, como { a:A, b:B, c:C }. Deben ser solo valores únicos, como en { "A", "B", "C" }.

    – ctlockey

    20 de septiembre de 2017 a las 2:59

  • En mi caso,` $(“.div”).autocomplete();` Tenía este error porque la clase .div no existía

    – Alex

    19/10/2017 a las 16:45

avatar de usuario
B Shelton

Si estaba tratando de usar autocompletar desde http://www.devbridge.com/projects/autocomplete/jquery/#demo, ahora choca con el método de autocompletar en jQuery UI. Tuve el mismo problema y luego noté que solo podía usar la implementación de jQuery UI.

(NOTA: parece que la documentación de esta página es incorrecta: http://docs.jquery.com/Plugins/Autocomplete#Setup)

avatar de usuario
José González

Si lo usa con la biblioteca jQuery UI, también tiene un complemento llamado autocomplete. En este caso, puede usar el alias del complemento devbridgeAutocomplete:

$('.autocomplete').devbridgeAutocomplete({ ... });

Esto resuelve el problema con la colisión de jQuery UI

  • Esto debería obtener más garrapatas porque eso resolvió mi problema.

    – Sr. Jo

    28 de noviembre de 2018 a las 14:23

  • Esto resolvió mi problema también. Loca. Oh, Stack Overflow, cómo te amo (la mayor parte del tiempo).

    – tjans

    28 de agosto de 2019 a las 18:38

Como dijo Shelton, la versión de devbridge.com (1.1.3) choca con jQuery UI (1.8.4). Lo hice funcionar asegurándome de que la versión de devbridge se carga después de la versión de jQuery UI.

avatar de usuario
j88

Tuve un problema similar para tagedit/autocompletar. Parece que también desea deshabilitar la función de autocompletar. Establecer la fuente en falso evita estos errores.

Solución:

options.autocompleteOptions.source = false;

avatar de usuario
zer0

Buscar al final de jquery.autocompletar.js la siguiente sección:

Cree un complemento jQuery encadenable:

$.fn.devbridgeAutocomplete = function (options, args) {....

Este devbridgeAutocomplete es un complemento alternativo para acceder a la misma funcionalidad usando estas líneas:

if (!$.fn.autocomplete) {
    $.fn.autocomplete = $.fn.devbridgeAutocomplete;
}

Entonces… puedes usar devbridgeAutocomplete en vez de autocompletar o cualquier nombre cambiando esto $.fn.devbridgeAutocomplete

avatar de usuario
samsky

en mi caso, tuve una segunda importación de jquery de la que no me di cuenta. Algo como:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"> </script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.devbridge-autocomplete/1.2.27/jquery.autocomplete.min.js"></script> 

// More code

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"> </script>

Así que asegúrese de importar el script de autocompletar después de inicializar jquery.

¿Ha sido útil esta solución?