Passo 1 — Configure os campos do formulário
No seu formulário do Elementor, crie os seguintes campos (com os IDs exatos):
| Campo | Tipo de campo | ID do campo (em Avançado → ID do campo) |
|---|---|---|
| CEP | Texto | cep |
| Rua / Logradouro | Texto | endereco |
| Bairro | Texto | bairro |
| Cidade | Texto | cidade |
| Estado (UF) | Texto | uf |
⚠️ O Elementor cria os IDs com prefixo
form-field-, então o campo CEP terá no DOM o ID#form-field-cep, e assim por diante.
🧠 Passo 2 — Adicione o JavaScript
No widget do formulário, vá em:
Avançado → Custom CSS / Scripts personalizados (ou use um plugin como Simple Custom CSS and JS).
Cole o seguinte código:
<script>
document.addEventListener('DOMContentLoaded', function () {
const cepInput = document.querySelector('#form-field-cep');
const enderecoInput = document.querySelector('#form-field-endereco');
const bairroInput = document.querySelector('#form-field-bairro');
const cidadeInput = document.querySelector('#form-field-cidade');
const ufInput = document.querySelector('#form-field-uf');
// Máscara simples de CEP
cepInput.addEventListener('input', function () {
let v = cepInput.value.replace(/\D/g, '');
if (v.length > 5) v = v.replace(/(\d{5})(\d)/, '$1-$2');
cepInput.value = v;
});
// Ao sair do campo CEP, consulta o ViaCEP
cepInput.addEventListener('blur', function () {
const cep = cepInput.value.replace(/\D/g, '');
if (cep.length !== 8) {
alert('CEP inválido. Digite um CEP com 8 números.');
return;
}
// Busca o CEP na API ViaCEP
fetch(`https://viacep.com.br/ws/${cep}/json/`)
.then(response => response.json())
.then(data => {
if (data.erro) {
alert('CEP não encontrado.');
return;
}
// Preenche os campos
enderecoInput.value = data.logradouro;
bairroInput.value = data.bairro;
cidadeInput.value = data.localidade;
ufInput.value = data.uf;
})
.catch(() => {
alert('Erro ao buscar o CEP. Tente novamente.');
});
});
});
</script>
✨ Passo 3 — Teste
Publique a página e teste o formulário:
-
Digite um CEP válido, ex:
01001-000. -
Ao sair do campo, os outros campos serão preenchidos automaticamente.
💡 Opcional — Melhorar a experiência do usuário
Você pode adicionar um indicador de carregamento ou mensagem de erro visual, por exemplo:
cepInput.style.backgroundColor = '#f0f0f0'; // enquanto busca
ou mostrar uma mensagem diretamente no formulário, em vez de alert.
🚀 Dica bônus
Se quiser que os campos “Rua, Bairro, Cidade, UF” fiquem só leitura (para evitar edição manual), você pode adicionar no final do script:
[enderecoInput, bairroInput, cidadeInput, ufInput].forEach(campo => campo.readOnly = true);