jQuery UI API - Widget de Autocompletar (Autocomplete Widget)
Categoría
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 cumple
minLengthla 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:
ui-autocomplete: se utiliza para mostrar elmenú (menu) que coincide con la entrada del usuario.ui-autocomplete-input: el elemento input instanciado por el widget de Autocompletar (Autocomplete Widget).
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 el
changeevento 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, Ejemplo de código: Inicializar el autocomplete con la
$( ".selector" ).autocomplete({ appendTo: "#someElem" });
Después de la inicialización, obtener o establecer la // 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 la
$( ".selector" ).autocomplete({ autoFocus: true });
Después de la inicialización, obtener o establecer la // 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 la
$( ".selector" ).autocomplete({ delay: 500 });
Después de la inicialización, obtener o establecer la // 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 la
$( ".selector" ).autocomplete({ disabled: true });
Después de la inicialización, obtener o establecer la // 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 la
$( ".selector" ).autocomplete({ minLength: 0 });
Después de la inicialización, obtener o establecer la // 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 la
$( ".selector" ).autocomplete({ position: { my : "right top", at: "right bottom" } });
Después de la inicialización, obtener o establecer la
// 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 en Se admiten varios tipos:
Ejemplo de código: Inicialice el autocomplete con las
$( ".selector" ).autocomplete({ source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] });
Después de la inicialización, obtener o establecer // 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.
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.
Ejemplo de código: Llamar al método destroy: $( ".selector" ).autocomplete( "destroy" ); |
| disable() | jQuery (plugin only) | Deshabilita el autocomplete.
Ejemplo de código: Llamar al método disable: $( ".selector" ).autocomplete( "disable" ); |
| enable() | jQuery (plugin only) | Habilita el autocomplete.
Ejemplo de código: Llamar al método enable: $( ".selector" ).autocomplete( "enable" ); |
| option( optionName ) | Object | Obtiene el valor actual asociado con eloptionName`optionName` especificado.
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.
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.
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.
Ejemplo de código: Llamar a este método:
$( ".selector" ).autocomplete( "option", { disabled: true } );
|
| search( [value ] ) | jQuery (plugin only) | Disparasearchel evento y, si el evento no se cancela, llama a la fuente de datos. Cuando se hace clic, puede usarse en botones de tipo select para abrir las sugerencias. Cuando se llama al método sin parámetros, se usa el valor actual de entrada. Se puede llamar con una cadena vacía yminLength: 0`minLength: 0` para mostrar todas las entradas.
Ejemplo de código: Llamar al método search: $( ".selector" ).autocomplete( "search", "" ); |
| 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.
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
Ejemplo de código: Agregar el valor del elemento como
_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`.
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`.
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.
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`.
Nota: 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.
Nota: 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.
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.
Nota: 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.
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 ) {} );
|
| search( event, ui ) | autocompletesearch | Se cumple antes de que se ejecute la búsqueda.minLengthydelaySe activa después. Si se cancela el evento, no se enviará ninguna solicitud ni se proporcionarán elementos de sugerencia.
Nota: Ejemplo de código: Inicializar el autocomplete con el callback search especificado:
$( ".selector" ).autocomplete({
search: function( event, ui ) {}
});
Vincular un listener de eventos al evento autocompletesearch:
$( ".selector" ).on( "autocompletesearch", 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.
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