oziAutocomplete
Versão: 2.2.1 — Atualizado em: 2026-04-29
Descrição
Plugin de campo de texto com sugestões automáticas para interfaces web. Transforma um <input type="text"> em um campo inteligente com dropdown de sugestões, normalizando acentos e variações de escrita durante a filtragem, e sincronizando automaticamente o valor selecionado em um <input hidden> para envio ao backend.
Suporta dois modos de operação: local — filtrando opções definidas via JSON estático — e remoto — consultando o servidor conforme o usuário digita, com debounce e cancelamento automático de requisições concorrentes. Os dois modos podem coexistir: abaixo do mínimo configurado as opções locais são exibidas; acima do mínimo, o servidor é consultado.
Exemplos
[1] Opções locais — mínimo
<input type="text"
class="form-control"
data-ozi-autocomplete="estado"
placeholder="Digite um estado...">
<script type="application/json" data-ozi-autocomplete-options="estado">
[
{ "value": "PR", "label": "Paraná" },
{ "value": "SC", "label": "Santa Catarina" },
{ "value": "SP", "label": "São Paulo" }
]
</script>
[2] Com hidden-name customizado e mensagens
<input type="text"
class="form-control"
data-ozi-autocomplete="produto"
data-ozi-autocomplete-hidden-name="produto_id"
data-ozi-autocomplete-msg-empty="Nenhum produto encontrado"
data-ozi-autocomplete-msg-search="Buscando produtos..."
placeholder="Digite um produto...">
<script type="application/json" data-ozi-autocomplete-options="produto">
[
{ "value": "1", "label": "Notebook Dell" },
{ "value": "2", "label": "Notebook Lenovo" }
]
</script>
[3] Busca remota — mínimo
<input type="text"
class="form-control"
data-ozi-autocomplete="cliente"
data-ozi-autocomplete-url="/api/clientes/buscar"
data-ozi-autocomplete-min="2"
data-ozi-autocomplete-delay="300"
placeholder="Digite o nome do cliente...">
<script type="application/json" data-ozi-autocomplete-options="cliente">
[]
</script>
[4] Local + remoto combinados
Abaixo do mínimo mostra opções locais. Acima do mínimo consulta o servidor.
<input type="text"
class="form-control"
data-ozi-autocomplete="cidade"
data-ozi-autocomplete-zld-url="/api/cidades/buscar"
data-ozi-autocomplete-zld-min="3"
data-ozi-autocomplete-zld-delay="400"
placeholder="Digite uma cidade...">
<script type="application/json" data-ozi-autocomplete-options="cidade">
[
{ "value": "1", "label": "São Paulo" },
{ "value": "2", "label": "Rio de Janeiro" },
{ "value": "3", "label": "Curitiba" }
]
</script>
Abaixo de 3 caracteres → mostra as opções locais. A partir de 3 → consulta
/api/cidades/buscar.
[5] Uso via JavaScript — evento ozi:change
// jQuery
$('[data-ozi-autocomplete="estado"]').on('ozi:change', function(e, item, instance, detail) {
console.log(detail.value); // value selecionado
console.log(detail.item); // { value, label }
});
// DOM nativo
document.querySelector('[data-ozi-autocomplete="estado"]')
.addEventListener('ozi:change', function(e) {
console.log(e.detail.value);
console.log(e.detail.item);
});
Recursos
- Modo local — filtra opções JSON já carregadas no navegador
- Modo remoto — consulta o servidor com debounce configurável
- Modo combinado — local abaixo do mínimo, remoto acima
- Normalização — ignora acentos e variações de escrita na filtragem
- Hidden automático — gera
<input hidden>sincronizado para envio - Cancelamento automático — requisições concorrentes são canceladas
- MutationObserver — detecta e inicializa novos elementos no DOM
- Evento
ozi:change— notifica seleção via jQuery e DOM nativo
Atributos HTML
Nova ferramenta
-
data-ozi-autocomplete-as→ mapeia campos do JSON externo para os nomes canônicos do plugin (value,label), permitindo consumir qualquer API sem transformar os dados no back-endFormato:
"canônico=alias, canônico=alias"Exemplo:data-ozi-autocomplete-as="value=id, label=nome" -
data-ozi-autocomplete-unique→ ativa validação de valor único no blur. Se o label digitado já existir na lista: limpa o campo, aplica is-invalid e exibe mensagem flutuante temporária (~2500ms). Se não existir: aplica is-valid. Evento disparado: ozi:unique-invalid -
data-ozi-autocomplete-unique-message→ mensagem exibida no toast quando o valor já existe. Padrão: "Valor já existente"
[1] Campo
| Atributo | Obrigatório | Descrição |
|---|---|---|
data-ozi-autocomplete |
✔ | Chave do campo — vincula ao JSON e define o name do hidden |
data-ozi-autocomplete-hidden-name |
— | Nome alternativo para o <input hidden> — padrão: mesma chave |
[2] Mensagens
| Atributo | Padrão | Descrição |
|---|---|---|
data-ozi-autocomplete-msg-empty |
Nenhum resultado encontrado |
Quando nenhuma opção corresponde |
data-ozi-autocomplete-msg-search |
Pesquisando... |
Durante carregamento remoto |
[3] Opções JSON
<script type="application/json" data-ozi-autocomplete-options="chave">
[
{ "value": "1", "label": "Opção Um" },
{ "value": "2", "label": "Opção Dois" }
]
</script>
[4] Busca Remota
| Atributo | Padrão | Descrição |
|---|---|---|
data-ozi-autocomplete-url |
— | URL para busca remota |
data-ozi-autocomplete-min |
2 |
Mínimo de caracteres para disparar a busca |
data-ozi-autocomplete-delay |
300 |
Delay em ms antes de executar a busca |
API Pública
| Método | Descrição |
|---|---|
OziAutocomplete.init(selector) |
Inicializa o plugin nos elementos encontrados |
OziAutocomplete.get('chave') |
Retorna a instância |
OziAutocomplete.value('chave') |
Retorna o value selecionado |
OziAutocomplete.value('chave', '2') |
Define o value programaticamente |
OziAutocomplete.item('chave') |
Retorna o objeto { value, label } selecionado |
OziAutocomplete.clear('chave') |
Limpa a seleção |
OziAutocomplete.reload('chave') |
Reinicializa a instância |
OziAutocomplete.destroy('chave') |
Remove a instância e os elementos gerados |
Uso com conteúdo dinâmico
oziAutocompleteInitFetched($('#destino'));