jQuery UI API - Widget de Autocompletar (Autocomplete Widget)

Categoría

Widgets

Uso

Descripción:La función de autocompletar busca y filtra según el valor introducido por el usuario, permitiéndole encontrar rápidamente y seleccionar de una lista de valores predefinidos.

Nuevo en la versión:1.8

Cualquier campo que pueda recibir entrada puede convertirse en Autocomplete, es decir,<input>elementos input,<textarea>elementos textarea ycontenteditableelementos con el atributo contenteditable.

Al dar foco al campo de Autocomplete o al escribir caracteres en él, el plugin comienza a buscar entradas coincidentes y muestra una lista de valores para elegir. Escribiendo más caracteres, el usuario puede filtrar la lista para obtener mejores coincidencias.

Este widget puede utilizarse para seleccionar valores previamente seleccionados, como introducir etiquetas de artículos o introducir direcciones de correo electrónico desde una libreta de direcciones. Autocomplete también puede usarse para rellenar información relacionada, como introducir el nombre de una ciudad para obtener su código postal.

Puede obtener los datos de una fuente local o remota: la fuente local es adecuada para conjuntos de datos pequeños, por ejemplo, una libreta de direcciones con 50 entradas; la fuente remota es adecuada para conjuntos de datos grandes, como una base de datos con cientos o miles de entradas. Para obtener más información sobre fuentes de datos personalizadas, consultesourcela documentación de la opción.

Interacción con el teclado

Cuando el menú está abierto, los siguientes comandos de teclado están disponibles:

  • UP - Mueve el foco al elemento anterior. Si está en el primer elemento, mueve el foco al campo de entrada (input). Si está en el campo de entrada, mueve el foco al último elemento.
  • DOWN - Mueve el foco al siguiente elemento. Si está en el último elemento, mueve el foco al campo de entrada (input). Si está en el campo de entrada, mueve el foco al primer elemento.
  • ESCAPE - Cierra el menú.
  • ENTER - Selecciona el elemento que tiene el foco y cierra el menú.
  • TAB - Selecciona el elemento que tiene el foco, cierra el menú y mueve el foco al siguiente elemento enfocable (focusable).
  • PAGE UP/DOWN - Desplaza una pantalla de elementos (según la altura del menú).

Cuando el menú está cerrado, los siguientes comandos de teclado están disponibles:

  • UP/DOWN - Si se cumpleminLengthla condición, se abre el menú.

Tematización

El widget de Autocompletar (Autocomplete Widget) utiliza elframework CSS de jQuery UIpara definir el estilo de su apariencia y sensación. Si necesita utilizar estilos específicos del widget de Autocompletar, puede usar los siguientes nombres de clase CSS:

Dependencias

Notas adicionales

  • Este widget requiere algo de CSS funcional; de lo contrario, no funcionará. Si crea un tema personalizado, use el archivo CSS específico del widget como punto de partida.
  • Este widget manipula el valor del elemento de forma programática, por lo que no se dispara elchangeevento nativo.

Navegación rápida

Opciones Métodos Puntos de extensión Eventos

Opciones Tipo Descripción Valor por defecto
appendTo Selector A qué elemento debe adjuntarse el menú. Cuando el valor esnullnull, se comprobará el elemento padre del campo de entrada para ver si tiene laui-frontclass ui-front. Si se encuentra un elemento con laui-frontclass ui-front, el menú se adjuntará a ese elemento. Si no se encuentra ningún elemento con laui-frontclass ui-front, el menú se adjuntará a body sin importar el valor.

Nota: cuando el menú de sugerencias está abierto,appendTola opción no debe cambiarse.

Ejemplo de código:

Inicializar el autocomplete con laappendToopción especificada:

$( ".selector" ).autocomplete({ appendTo: "#someElem" });
    

Después de la inicialización, obtener o establecer laappendToopción:

// getter
var appendTo = $( ".selector" ).autocomplete( "option", "appendTo" );
 
// setter
$( ".selector" ).autocomplete( "option", "appendTo", "#someElem" );
    
null
autoFocus Boolean Si se establece entruetrue, cuando el menú se muestre, el primer elemento obtendrá el foco automáticamente.

Ejemplo de código:

Inicializar el autocomplete con laautoFocusopción especificada:

$( ".selector" ).autocomplete({ autoFocus: true });
    

Después de la inicialización, obtener o establecer laautoFocusopción:

// getter
var autoFocus = $( ".selector" ).autocomplete( "option", "autoFocus" );
 
// setter
$( ".selector" ).autocomplete( "option", "autoFocus", true );
    
false
delay Integer El retraso entre pulsar una tecla y ejecutar la búsqueda, en milisegundos. Para datos locales, un retraso de cero tiene sentido (más receptivo), pero para datos remotos puede generar una carga significativa y reducir la capacidad de respuesta.

Ejemplo de código:

Inicializar el autocomplete con ladelayopción especificada:

$( ".selector" ).autocomplete({ delay: 500 });
    

Después de la inicialización, obtener o establecer ladelayopción:

// getter
var delay = $( ".selector" ).autocomplete( "option", "delay" );
 
// setter
$( ".selector" ).autocomplete( "option", "delay", 500 );
    
300
disabled Boolean Si se establece entruetrue, el autocomplete queda deshabilitado.

Ejemplo de código:

Inicializar el autocomplete con ladisabledopción especificada:

$( ".selector" ).autocomplete({ disabled: true });
    

Después de la inicialización, obtener o establecer ladisabledopción:

// getter
var disabled = $( ".selector" ).autocomplete( "option", "disabled" );
 
// setter
$( ".selector" ).autocomplete( "option", "disabled", true );
    
false
minLength Integer El número mínimo de caracteres que el usuario debe escribir antes de ejecutar la búsqueda. Para datos locales con solo unas pocas entradas, normalmente se establece en cero, pero es necesario establecer un valor alto cuando una búsqueda de un solo carácter puede coincidir con miles de entradas.

Ejemplo de código:

Inicializar el autocomplete con laminLengthopción especificada:

$( ".selector" ).autocomplete({ minLength: 0 });
    

Después de la inicialización, obtener o establecer laminLengthopción:

// getter
var minLength = $( ".selector" ).autocomplete( "option", "minLength" );
 
// setter
$( ".selector" ).autocomplete( "option", "minLength", 0 );
    
1
position Object Identifica la posición del menú de sugerencias en relación con el elemento input asociado.ofLa opción por defecto es el elemento input, pero puede especificar otro elemento de posicionamiento. Para más detalles sobre las diversas opciones, consultejQuery UI Position。

Ejemplo de código:

Inicializar el autocomplete con lapositionopción especificada:

$( ".selector" ).autocomplete({ position: { my : "right top", at: "right bottom" } });
    

Después de la inicialización, obtener o establecer lapositionopción:

// getter
var position = $( ".selector" ).autocomplete( "option", "position" );
 
// setter
$( ".selector" ).autocomplete( "option", "position", { my : "right top", at: "right bottom" } );
    
{ my: "left top", at: "left bottom", collision: "none" }
source Array o String o Function( Object request, Function response( Object data ) ) Define los datos a utilizar; debe especificarse.

Independientemente de la variable que utilice, la etiqueta siempre se trata como texto. Si desea que la etiqueta se trate como html, puede usarla extensión html de Scott González. La demostración se centra ensourcelas diferentes variantes de la opción: puede encontrar la que coincida con su caso de uso y ver el código correspondiente.

Se admiten varios tipos:

  • Array: un array que se puede usar para datos locales. Se admiten dos formatos:
    • Array de cadenas:[ "Choice1", "Choice2" ]
    • Un array de objetos conlabelyvaluelas propiedades:[ { label: "Choice1", value: "value1" }, ... ]
    La propiedad label se muestra en el menú de sugerencias. Cuando el usuario selecciona una entrada, el valor (value) se inserta en el elemento input. Si solo se especifica una propiedad, dicha propiedad se tratará como label y value, por ejemplo, si solo proporcionavaluela propiedad, el value también se tratará como etiqueta (label).
  • String: cuando se usa una cadena, el plugin Autocomplete espera que la cadena apunte a un recurso URL que devuelva datos JSON. Puede estar en el mismo host o en un host diferente (debe proporcionar JSONP). El plugin Autocomplete no filtra los resultados, sino que añade una cadena de consulta a través de untermcampo para que el script del lado del servidor filtre los resultados. Por ejemplo, si lasourceopción se establece en"http://example.com"search.php, y el usuario escribefooabc, la solicitud GET seráhttp://example.com?term=foosearch.php?term=abc. El formato de los datos en sí puede ser el mismo que el de los datos locales descritos anteriormente.
  • Function: la tercera variante, una función de callback, ofrece la máxima flexibilidad y puede usarse para conectar cualquier fuente de datos a Autocomplete. La función de callback acepta dos argumentos:
    • unrequestobjeto, con unatermpropiedad, que representa el valor de la entrada de texto actual. Por ejemplo, si el usuario escribe en el campo city"new yo", entonces Autocomplete term es equivalente a"new yo"。
    • unresponsefunción de callback que proporciona un único parámetro: los datos sugeridos al usuario. Estos datos deben filtrarse según el term proporcionado, y pueden estar en cualquiera de los formatos de datos locales descritos anteriormente. Se utiliza para proporcionar un callback de source personalizado durante la solicitud para manejar errores. Incluso si se encuentra un error, debe llamar a laresponsefunción de callback. Esto asegura que el widget esté siempre en el estado correcto.

    Al filtrar datos locales, puede usar la$.ui.autocomplete.escapeRegexfunción incorporada. Acepta un parámetro de cadena, escapa todos los caracteres de expresión regular, lo que permite pasar el resultado de forma segura anew RegExp()。

Ejemplo de código:

Inicialice el autocomplete con lassourceopciones especificadas:

$( ".selector" ).autocomplete({ source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] });
    

Después de la inicialización, obtener o establecersourcela opción:

// getter
var source = $( ".selector" ).autocomplete( "option", "source" );
 
// setter
$( ".selector" ).autocomplete( "option", "source", [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] );
    
none; must be specified

Método Devuelve Descripción
close() jQuery (plugin only) Cierra el menú de Autocomplete. Cuando se combina con elsearchmétodo, se puede utilizar para cerrar el menú abierto.
  • Este método no acepta ningún parámetro.

Ejemplo de código:

Llamar al método close:

$( ".selector" ).autocomplete( "close" );
    
destroy() jQuery (plugin only) Elimina completamente la funcionalidad de autocomplete. Esto devuelve el elemento a su estado previo a la inicialización.
  • Este método no acepta ningún parámetro.

Ejemplo de código:

Llamar al método destroy:

$( ".selector" ).autocomplete( "destroy" );
    
disable() jQuery (plugin only) Deshabilita el autocomplete.
  • Este método no acepta ningún parámetro.

Ejemplo de código:

Llamar al método disable:

$( ".selector" ).autocomplete( "disable" );
    
enable() jQuery (plugin only) Habilita el autocomplete.
  • Este método no acepta ningún parámetro.

Ejemplo de código:

Llamar al método enable:

$( ".selector" ).autocomplete( "enable" );
    
option( optionName ) Object Obtiene el valor actual asociado con eloptionName`optionName` especificado.
  • optionName
    Tipo: String
    Descripción: el nombre de la opción a obtener.

Ejemplo de código:

Llamar a este método:

var isDisabled = $( ".selector" ).autocomplete( "option", "disabled" );
    
option() PlainObject Obtiene un objeto que contiene pares clave/valor que representan el hash de opciones actual del autocomplete.
  • Este método no acepta ningún parámetro.

Ejemplo de código:

Llamar a este método:

var options = $( ".selector" ).autocomplete( "option" );
    
option( optionName, value ) jQuery (plugin only) Establece el valor de la opción de autocomplete asociado con eloptionName`optionName` especificado.
  • optionName
    Tipo: String
    Descripción: el nombre de la opción a establecer.
  • value
    Tipo: Object
    Descripción: el valor a establecer para la opción.

Ejemplo de código:

Llamar a este método:

$( ".selector" ).autocomplete( "option", "disabled", true );
    
option( options ) jQuery (plugin only) Establece una o más opciones para el autocomplete.
  • options
    Tipo: Object
    Descripción: los pares option-value a establecer.

Ejemplo de código:

Llamar a este método:

$( ".selector" ).autocomplete( "option", { disabled: true } );
    
widget() jQuery Devuelve unjQueryobjeto que contiene el elemento del menú. Aunque los elementos del menú se crean y destruyen constantemente, el elemento del menú en sí se crea en la inicialización y se reutiliza continuamente.
  • Este método no acepta ningún parámetro.

Ejemplo de código:

Llamar al método widget:

$( ".selector" ).autocomplete( "widget" );
    

Puntos de extensión Devuelve Descripción
El widget Autocomplete se crea mediantela fábrica de widgets (Widget Factory)y puede ser extendido. Al extender el widget, puede sobrescribir o agregar comportamientos al widget. Los métodos que se proporcionan a continuación sirven como puntos de extensión, al igual que losmétodos de plugintienen la misma estabilidad de API. Para obtener más información sobre la extensión de widgets, consulteExtensión de widgets a través de Widget Factory.
_renderItem( ul, item ) jQuery Method that controls the creation of each option in the widget's menu. The method must create a new <li> element, append it to the menu, and return it.

Note: At this time the<ul> element created must contain an <a> element for compatibility with the menu widget. See the example below.

  • ul
    Tipo: jQuery
    Descripción: el nuevo<li>elemento al que debe agregarse el<ul>elemento.
  • item
    Tipo: Object
    • label
      Tipo: String
      Descripción: la cadena que se muestra para la entrada.
    • item
      Tipo: String
      Descripción: el valor que se inserta en el campo de entrada cuando se selecciona la entrada.

Ejemplo de código:

Agregar el valor del elemento como<li>un atributo data en el elemento.

_renderItem: function( ul, item ) {
  return $( "<li>" )
    .attr( "data-value", item.value )
    .append( $( "<a>" ).text( item.label ) )
    .appendTo( ul );
}
    
_renderMenu( ul, items ) jQuery (plugin only) Este método se encarga de ajustar el tamaño del menú antes de que se muestre. El elemento del menú se puede obtener mediantethis.menu.elementel uso de `this.menu`.
  • ul
    Tipo: jQuery
    Descripción: un<ul>elemento vacío que se usará como menú del widget.
  • items
    Tipo: Array
    Descripción: un array cuyos elementos son las entradas que coinciden con la entrada del usuario. Cada entrada es un objeto con laslabelyvaluepropiedades `label` y `value`.

Ejemplo de código:

Agregar un nombre de clase CSS a los elementos del menú antiguos.

_renderMenu: function( ul, items ) {
  var that = this;
  $.each( items, function( index, item ) {
    that._renderItemData( ul, item );
  });
  $( ul ).find( "li:odd" ).addClass( "odd" );
}
    
_resizeMenu() jQuery (plugin only) Este método se encarga de ajustar el tamaño del menú antes de que se muestre. El elemento del menú se puede obtener mediantethis.menu.elementel uso de `this.menu`.
  • Este método no acepta ningún parámetro.

Ejemplo de código:

El menú siempre se muestra con 500 píxeles de ancho.

_resizeMenu: function() {
  this.menu.element.outerWidth( 500 );
}
    

Eventos Tipo Descripción
change( event, ui ) autocompletechange Se dispara este evento si el valor del campo de entrada cambia.
  • event
    Tipo: Event
  • ui
    Tipo: Object
    • item
      Tipo: Object
      Descripción: el elemento seleccionado del menú, de lo contrario la propiedad esnull。

Ejemplo de código:

Inicialice el autocomplete con el callback `change` especificado:

$( ".selector" ).autocomplete({
  change: function( event, ui ) {}
});
    

Vincule un listener de eventos al evento `autocompletechange`:

$( ".selector" ).on( "autocompletechange", function( event, ui ) {} );
    
close( event, ui ) autocompleteclose Se dispara cuando el menú se oculta. No todos loscloseeventos `close` van acompañados de unchangeevento `search`.
  • event
    Tipo: Event
  • ui
    Tipo: Object

Nota:uiEl objeto `ui` está vacío; se incluye aquí para mantener la coherencia con otros eventos.

Ejemplo de código:

Inicialice el autocomplete con el callback `close` especificado:

$( ".selector" ).autocomplete({
  close: function( event, ui ) {}
});
    

Vincule un listener de eventos al evento `autocompleteclose`:

$( ".selector" ).on( "autocompleteclose", function( event, ui ) {} );
    
create( event, ui ) autocompletecreate Se dispara cuando se crea el autocomplete.
  • event
    Tipo: Event
  • ui
    Tipo: Object

Nota:uiEl objeto `ui` está vacío; se incluye aquí para mantener la coherencia con otros eventos.

Ejemplo de código:

Inicialice el autocomplete con el callback `create` especificado:

$( ".selector" ).autocomplete({
  create: function( event, ui ) {}
});
    

Vincule un listener de eventos al evento `autocompletecreate`:

$( ".selector" ).on( "autocompletecreate", function( event, ui ) {} );
    
focus( event, ui ) autocompletefocus Se dispara cuando el foco se mueve a un elemento (no seleccionado). La acción predeterminada es reemplazar el valor del campo de texto con el valor del elemento enfocado, incluso si el evento se desencadena mediante interacción de teclado. Cancelar este evento evita que se actualice el valor, pero no evita que el elemento del menú reciba el foco.
  • event
    Tipo: Event
  • ui
    Tipo: Object
    • item
      Tipo: Object
      Descripción: el elemento que recibió el foco.

Ejemplo de código:

Inicialice el autocomplete con el callback `focus` especificado:

$( ".selector" ).autocomplete({
  focus: function( event, ui ) {}
});
    

Vincule un listener de eventos al evento `autocompletefocus`:

$( ".selector" ).on( "autocompletefocus", function( event, ui ) {} );
    
open( event, ui ) autocompleteopen Se dispara cuando se abre el menú de sugerencias o este se actualiza.
  • event
    Tipo: Event
  • ui
    Tipo: Object

Nota:uiEl objeto `ui` está vacío; se incluye aquí para mantener la coherencia con otros eventos.

Ejemplo de código:

Inicialice el autocomplete con el callback `open` especificado:

$( ".selector" ).autocomplete({
  open: function( event, ui ) {}
});
    

Vincule un listener de eventos al evento `autocompleteopen`:

$( ".selector" ).on( "autocompleteopen", function( event, ui ) {} );
    
response( event, ui ) autocompleteresponse Se dispara después de que se completa la búsqueda y antes de que se muestre el menú. Se utiliza para la manipulación local de los datos de sugerencias, donde elsourcecallback de la opción `source` personalizado no es necesario. Este evento siempre se dispara al completar la búsqueda, y también se dispara si la búsqueda no arroja resultados o el Autocomplete está deshabilitado, lo que impide que el menú se muestre.
  • event
    Tipo: Event
  • ui
    Tipo: Object
    • content
      Tipo: Array
      Descripción: contiene los datos de respuesta y puede modificarse para cambiar los resultados mostrados. Estos datos ya están normalizados, así que si modifica los datos, asegúrese de que cada elemento contenga lasvalueylabelpropiedades `label` y `value`.

Ejemplo de código:

Inicializar el autocomplete con el callback response especificado:

$( ".selector" ).autocomplete({
  response: function( event, ui ) {}
});
    

Vincular un listener de eventos al evento autocompleteresponse:

$( ".selector" ).on( "autocompleteresponse", function( event, ui ) {} );
    
select( event, ui ) autocompleteselect Se activa al seleccionar un elemento del menú. La acción predeterminada es reemplazar el valor del campo de texto por el valor del elemento seleccionado. Cancelar este evento impide que el valor se actualice, pero no impide que el menú se cierre.
  • event
    Tipo: Event
  • ui
    Tipo: Object
    • item
      Tipo: Object
      Descripción: un objeto con lalabelyvaluepropiedad del elemento seleccionado.

Ejemplo de código:

Inicializar el autocomplete con el callback select especificado:

$( ".selector" ).autocomplete({
  select: function( event, ui ) {}
});
    

Vincular un listener de eventos al evento autocompleteselect:

$( ".selector" ).on( "autocompleteselect", function( event, ui ) {} );
    

Ejemplos

Ejemplo 1:

Un Autocomplete simple de jQuery UI.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>自动完成部件(Autocomplete Widget)演示</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
</head>
<body>
 
<label for="autocomplete">选择一个编程语言:</label>
<input id="autocomplete">
 
<script>
$( "#autocomplete" ).autocomplete({
  source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ]
});
</script>
 
</body>
</html>

Ejemplo 2:

Utiliza un callback de origen personalizado para coincidir con el inicio de los términos.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>自动完成部件(Autocomplete Widget)演示</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
</head>
<body>
 
<label for="autocomplete">选择一个编程语言:</label>
<input id="autocomplete">
 
<script>
var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ];
$( "#autocomplete" ).autocomplete({
  source: function( request, response ) {
          var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
          response( $.grep( tags, function( item ){
              return matcher.test( item );
          }) );
      }
});
</script>
 
</body>
</html>

Otras extensiones