Autocomplete

View pricing →

Início rápido da instalação Pro 🚀

O campo autocomplete permite que você pesquise através de uma lista de opções.

A propriedade options pode aceitar três formatos diferentes de valores:

  • Um array de objetos com as chaves value e label (veja o exemplo acima)
  • Um array de strings ['A', 'B', 'C']
  • Um objeto literal com pares chave-valor { a: 'A', b: 'B', c: 'C' }
  • Uma função que retorna qualquer um dos formatos acima
Opções vazias

Se você atribuir opções como um array vazio, o campo será renderizado em um estado desabilitado.

Exemplos básicos

Seleção única

Por padrão, o campo de autocompletar será renderizado no modo de seleção única:

Carregar exemplo ao vivo

Seleção múltipla

Ao definir a propriedade multiple, o campo de autocompletar será renderizado no modo de seleção múltipla:

Carregar exemplo ao vivo
Valor do campo de seleção múltipla

Note no exemplo acima que, porque a propriedade multiple está definida, a propriedade value deve ser um array.

Filtragem

O campo de autocompletar filtrará opções com sua própria função interna de busca. Você pode substituir essa função de busca fornecendo à propriedade filter uma função sua. Sua função receberá dois argumentos, a option que está sendo iterada e o valor atual de search:

Carregar exemplo ao vivo

Opções dinâmicas

Em vez de passar uma lista estática para a propriedade options, você pode atribuí-la a uma função. Fazer isso é útil quando você precisa carregar opções de uma API ou outra fonte.

Parâmetro de busca

Neste exemplo, vamos atribuir à propriedade options a função searchMovies. Ao fazer isso, searchMovies receberá o objeto context como argumento. Dentro deste objeto context está a propriedade search, que é o valor atual de busca. Para realizar nossa busca, usaremos o valor de busca como o parâmetro de consulta para nossa solicitação de API:

Carregar exemplo ao vivo

Parâmetros de página e hasNextPage

Um cenário provável que você encontrará é a necessidade de pesquisar através de uma API paginada. Isso pode ser feito referenciando o mesmo objeto context de antes. Dentro deste objeto, podemos utilizar as propriedades page e hasNextPage. A propriedade page é o número da página atual, e a propriedade hasNextPage é uma função a ser chamada quando houver mais páginas para carregar:

Carregar exemplo ao vivo

Carregador de opções

Reidratando valores

O input de autocomplete do FormKit também fornece uma propriedade optionLoader que permite reidratar valores que não estão na lista de opções. Neste exemplo, forneceremos ao autocomplete um valor inicial (um ID de filme) e atribuiremos o optionLoader a uma função que fará uma requisição à API para obter o filme:

Carregar exemplo ao vivo

Note no exemplo acima que a função optionLoader recebe dois argumentos: o value da opção selecionada (neste caso, o ID do filme) e o cachedOption. A propriedade cachedOption é usada para evitar buscas desnecessárias. Se o cachedOption não for null, significa que a opção selecionada já foi carregada, e você pode retornar o cachedOption diretamente.

Estilo de Carregamento

Em vez de exigir que seus usuários cliquem no botão Carregar mais para carregar opções adicionais, você pode definir a propriedade loadOnScroll como verdadeira, o que paginará as opções à medida que você rolar até o final da lista de opções.

Carregar ao criar

Se você preferir carregar opções quando o autocomplete for criado, você pode definir a propriedade load-on-created como verdadeira, e nossa função, loadCurrentlyPopularMovies, será chamada sem que o usuário precise expandir a lista:

Carregar exemplo ao vivo

Aparência da opção

Slot de opção

O input de autocomplete permite que você personalize a aparência de cada opção usando o slot de opção. Neste exemplo, estamos usando o slot de opção para exibir o ativo de cada opção; logotipo e nome:

Carregar exemplo ao vivo

Aparência da seleção

O input de autocomplete permite que você personalize a aparência da opção selecionada.

Propriedade de aparência da seleção

O campo de entrada do autocomplete permite que você personalize a aparência da opção selecionada usando a propriedade selection-appearance. Tanto para o autocomplete de seleção única quanto para o de múltipla seleção, você pode definir a propriedade selection-appearance para text-input (padrão) ou option:

Carregar exemplo ao vivo

Slot de seleção

Se você deseja apenas personalizar a exibição da opção selecionada, defina a aparência da seleção para option.

Carregar exemplo ao vivo

Propriedades comportamentais

Mensagem de vazio

O campo de entrada do autocomplete, por padrão, não expandirá a caixa de listagem quando nenhum resultado de pesquisa for encontrado durante o filtro. Você pode alterar esse comportamento atribuindo à propriedade empty-message uma mensagem para exibir quando nenhum resultado for encontrado:

Carregar exemplo ao vivo

Fechar ao selecionar

Se você deseja que a caixa de listagem permaneça expandida após selecionar um valor, você pode definir close-on-select para false.

Carregar exemplo ao vivo

Recarregar ao confirmar

Se você deseja que as opções sejam recarregadas quando o usuário confirmar uma seleção, use a propriedade reload-on-commit:

Carregar exemplo ao vivo

Abrir ao clicar

Para habilitar a abertura da caixa de listagem do autocomplete ao clicar em seu campo de pesquisa, defina a propriedade open-on-click para true:

Carregar exemplo ao vivo

Abrir ao focar

Se você deseja abrir a caixa de listagem do autocomplete sempre que o campo de entrada for clicado, defina a propriedade open-on-focus para true:

Carregar exemplo ao vivo
Abrir ao focar vs Abrir ao clicar

Se open-on-focus for usado, open-on-click será implicitamente definido.

Limpar pesquisa ao abrir

Apenas para autocompletes de seleção única, se você deseja limpar o campo de pesquisa quando a lista é aberta, defina a propriedade clear-search-on-open:

Carregar exemplo ao vivo

Seleção removível

Para um autocomplete de seleção única, você pode definir a propriedade selection-removable. Quando definida como true, um botão de remover será exibido ao lado da opção selecionada. Esta propriedade é por padrão definida como true para autocompletes com aparência de seleção de option.

Apenas seleção única

A propriedade selection-removable não pode ser usada para seleções múltiplas.

Carregar exemplo ao vivo

Abrir ao remover

Se você deseja que a lista se expanda quando uma seleção for removida, use a propriedade open-on-remove:

Carregar exemplo ao vivo

Máximo

Se você deseja limitar o número de opções que podem ser selecionadas, você pode usar a propriedade max:

Carregar exemplo ao vivo

Exemplo completo

Agora vamos combinar o que aprendemos até agora, utilizando o slot option para marcação personalizada, e definindo a propriedade options para uma função que retornará páginas de filmes de uma API:

Carregar exemplo ao vivo

Props & Atributos

PropTypePadrãoDescrição
debouncenumber200Número de milissegundos para atrasar chamadas a uma função de opções.
optionsany[]A lista de opções que o usuário pode selecionar.
load-on-scrollbooleanfalseQuando definido como `true`, o autocomplete tentará carregar mais opções com base na posição de rolagem do usuário final
selection-appearancestringtext-inputAltera a maneira como o rótulo da opção é exibido.
multiplebooleanfalsePermite seleções múltiplas.
open-on-clickbooleanfalseO autocomplete é expandido ao focar no campo de entrada, ao contrário de esperar para expandir até que um valor de pesquisa seja inserido.
filterfunctionnullUsado para aplicar sua própria função de filtro personalizada para opções estáticas.
option-loaderfunctionnullUsado para hidratar o valor inicial ou realizar uma solicitação adicional para carregar mais informações de uma opção selecionada.
empty-messagestringundefinedExibe uma mensagem quando não há opções para mostrar.
maxnumberundefinedLimita o número de opções que podem ser selecionadas.
open-on-removebooleanfalseQuando a propriedade `selection-removable` está definida como `true`, o autocomplete não abrirá após o valor selecionado ser removido. Você pode alterar esse comportamento definindo a propriedade `open-on-remove` como `true`.
open-on-focusbooleanfalse
options-appearancestringundefinedPara autocompletes de seleção múltipla, esta propriedade permite personalizar a aparência das opções selecionadas. Os valores possíveis são `default` (o padrão) ou `checkbox`.
always-load-on-openbooleantrueDetermina se o autocomplete deve sempre carregar suas opções quando aberto ou se deve referenciar as opções que foram previamente encontradas ao abrir.
load-on-createdbooleanfalseQuando definido como `true`, o autocomplete carregará as opções quando o nó for criado.
clear-search-on-openbooleanfalseQuando definido como `true`, o campo de pesquisa será limpo quando a lista for aberta.
maxnumber | stringundefinedSe você deseja limitar o número de opções que podem ser selecionadas, você pode usar a propriedade `max` (aplica-se apenas a seleção múltipla).
popoverbooleanfalseRenderiza a lista do campo de entrada usando a API Popover do navegador.
Mostrar Universal props
configObject{}Opções de configuração a serem fornecidas para o nó do input e qualquer nó descendente deste input.
delayNumber20Número de milissegundos para debounce do valor do input antes de despachar o commit hook.
dirtyBehaviorstringtouchedDetermina como o indicador "dirty" deste input é definido. Pode ser configurado como touched ou compare - touched (o padrão) é mais performático, mas não detectará quando o formulário corresponder novamente ao seu estado inicial.
errorsArray[]Array de strings para exibir como mensagens de erro neste campo.
helpString''Texto para o texto de ajuda associado ao input.
idStringinput_{n}O ID único do input. Fornecer um ID também permite acesso global ao nó do input.
ignoreBooleanfalseImpede que um input seja incluído em qualquer pai (grupo, lista, formulário etc). Útil ao usar inputs para a interface do usuário em vez de valores reais.
indexNumberundefinedPermite que um input seja inserido no índice fornecido, se o pai for uma lista. Se o valor do input for indefinido, ele herda o valor dessa posição de índice. Se ele tiver um valor, ele o insere nos valores da lista no índice fornecido.
labelString''Texto para o elemento label associado ao input.
nameStringinput_{n}O nome do input como identificado no objeto de dados. Isso deve ser único dentro de um grupo de campos.
parentFormKitNodecontextualPor padrão, o pai é um grupo, lista ou formulário de envolvimento, mas essa prop permite a atribuição explícita do nó pai.
prefix-iconString''Especifica um ícone para colocar na seção prefixIcon.
preservebooleanfalsePreserva o valor do input em um grupo pai, lista ou formulário quando o input é desmontado.
preserve-errorsbooleanfalsePor padrão, os erros definidos em inputs usando setErrors são automaticamente limpos no input. Definir essa prop como true mantém o erro até que ele seja explicitamente limpo.
sections-schemaObject{}Um objeto de chaves de seção e valores parciais de esquema, em que cada esquema parcial é aplicado à seção respectiva.
suffix-iconString''Especifica um ícone para colocar na seção suffixIcon.
typeStringtextO tipo de input a ser renderizado pela biblioteca.
validationString, Array[]As regras de validação a serem aplicadas ao input.
validation-visibilityStringblurDetermina quando mostrar as regras de validação com falha de um input. Os valores válidos são blur, dirty e live.
validation-labelString{label prop}Determina qual rótulo usar nas mensagens de erro de validação, por padrão, usa a propriedade label, se disponível, caso contrário, usa a propriedade name.
validation-rulesObject{}Regras de validação personalizadas adicionais para disponibilizar na propriedade de validação.
valueAnyundefinedInicializa o valor do input e/ou de seus filhos. Não é reativo. Pode inicializar grupos inteiros (formulários) e listas..

Seções

Você pode direcionar uma seção específica de uma entrada usando a "key" dessa seção, permitindo que você modifique as classes, HTML (por meio de :sections-schema ou o conteúdo (por meio de slots) dessa seção). Saiba mais sobre as seções aqui.

A estrutura do autocompletar muda dependendo de alguns cenários diferentes:

  • Se selection-appearance foi definido como text-input (o padrão) ou option.
  • Se múltiplas seleções estão habilitadas através do atributo multiple.

Aparência de seleção text-input

View on a larger screen to see this section diagram.

Seus atletas favoritos
Serena, Pelé
Tiger Pelé
Procure por seus atletas favoritos.
Desculpe, esse atleta não pôde ser encontrado.

Aparência de seleção option, seleção única

View on a larger screen to see this section diagram.

Seu atleta favorito
Pelé
X
Tiger Pelé
Procure por seu atleta favorito.
Desculpe, esse atleta não pôde ser encontrado.

Aparência da seleção option, seleção múltipla

View on a larger screen to see this section diagram.

Seu atleta favorito
Tiger Pelé
Pelé
X
Procure pelo seu atleta favorito.
Desculpe, esse atleta não pôde ser encontrado.

Estrutura interna da lista de opções

Abaixo está a estrutura da lista de opções interna (listbox) dos diagramas acima:

View on a larger screen to see this section diagram.

Section-keyDescrição
selectorA seção do seletor é um elemento botão que abre a lista de opções do dropdown.
selectionsContém seções de seleção individuais.
selectionContém a opção selecionada.
listitemUm elemento de item de lista que contém a seção de opção.
optionUma div que contém o conteúdo da opção.
listboxA seção listbox é um elemento ul que contém a lista de opções.
dropdownWrapperEnvolve a seção listbox. Uma div que gerencia a rolagem da listbox.
optionLoadingUm elemento span que é renderizado condicionalmente dentro da opção selecionada quando o carregamento está ocorrendo.
loaderIconUm elemento para exibir um ícone no elemento seletor quando o carregamento está ocorrendo.
selectIconUm elemento para exibir um ícone no elemento seletor quando o dropdown está fechado.
loadMoreUm elemento de item de lista que é renderizado condicionalmente na parte inferior da lista de opções quando há mais páginas para carregar.
loadMoreInnerUm elemento span que atua como um invólucro para o loaderIcon dentro da seção loadMore.
removeSelectionUm elemento botão usado para remover uma seleção específica.
closeIconUm elemento para exibir um ícone dentro do botão removeSelection.
listboxButtonUm elemento botão que é usado para abrir o dropdown.
emptyMessageUm elemento de item de lista que é renderizado condicionalmente quando não há opções para exibir.
emptyMessageInnerUm elemento span que atua como um invólucro para a seção emptyMessage.
Mostrar Universal section keys
outerO elemento de envolvimento mais externo.
wrapperUm invólucro ao redor do rótulo e do input.
labelO rótulo do input.
prefixPor padrão, não gera saída, mas permite conteúdo diretamente antes de um elemento input.
prefixIconUm elemento para gerar um ícone antes da seção de prefixo.
innerUm invólucro ao redor do próprio elemento input.
suffixPor padrão, não gera saída, mas permite conteúdo diretamente após um elemento input.
suffixIconUm elemento para gerar um ícone após a seção de sufixo.
inputO próprio elemento input.
helpO elemento que contém o texto de ajuda.
messagesUm invólucro ao redor de todas as mensagens.
messageO elemento (ou muitos elementos) que contém uma mensagem - na maioria das vezes mensagens de validação e erros.

Acessibilidade

Todos os campos de entrada do FormKit são projetados com as seguintes considerações de acessibilidade em mente. Ajude-nos a melhorar continuamente a acessibilidade para todos, relatando problemas de acessibilidade aqui:

Marcação semânticaAtributos AriaAcessível por tecladoIndicadores de focoContraste de cores com o tema fornecidoEtiquetas acessíveis, texto de ajuda e erros
Chave de SeçãoAtributoPadrãoDescrição
inputtabindex-1 ou 0Prioriza a ordem de foco do teclado definindo-a para -1 quando desativado e 0 quando ativado.
rolecomboboxIndica às tecnologias assistivas que este elemento funciona como uma caixa de combinação.
readonlyRestringe edições do usuário, garantindo a integridade dos dados e uma experiência de usuário controlada e informativa.
aria-autocompletelistOrienta sugestões de entrada, apresentando uma coleção de valores que poderiam completar a entrada do usuário.
aria-activedescendantGerencia o foco para o elemento descendente ativo atual.
aria-expandedTransmite o estado expansível quando o elemento está em foco.
aria-controlsAssocia o elemento listbox, com este elemento.
listboxButtontabindex-1 ou 0Prioriza a ordem de foco do teclado definindo-a para -1 quando desativado e 0 quando ativado.
rolebuttonIndica às tecnologias assistivas que este elemento funciona como um botão.
aria-haspopuptrueSinaliza que um elemento aciona um pop-up ou menu
aria-expandedTransmite o estado expansível quando o elemento está em foco.
aria-controlsAssocia o elemento listbox, com este elemento.
aria-disabledComunica o estado desativado quando a entrada está desativada.
selectionWrappertabindex-1 ou 0Prioriza a ordem de foco do teclado definindo-a para -1 quando desativado e 0 quando ativado.
selectionsaria-livepoliteComunica mudanças de conteúdo dinâmico quando seleções estão na tela.
removeSelectiontabindex-1Remove a priorização do foco do teclado neste elemento.
aria-controlsAssocia o elemento de entrada, com este elemento.
Mostrar Universal chave de seção
labellabelforAssocia isso a um elemento de entrada, aprimorando acessibilidade e experiência do usuário
inputinputdisabledDesabilita um elemento HTML, impedindo a interação do usuário e sinalizando um estado não interativo
aria-describedbyAprimora a acessibilidade associando um elemento a uma descrição, auxiliando leitores de tela
aria-requiredAdiciona o estado necessário quando a validação é exigida.
iconiconforSempre que um ícone é definido como rótulo, ele o vincula a um elemento de entrada, aprimorando acessibilidade e experiência do usuário

Interações com o Teclado

Evento de TecladoDescrição
TabMove o foco para a próxima entrada focalizável na página.
Shift + TabMove o foco para a entrada focalizável anterior na página.