Introdução
Neste projeto, você aprenderá como criar um novo endereço e gerenciar endereços em uma aplicação web. O projeto envolve a implementação de um dropdown em cascata de estado-cidade, validação de formulário, estilização de rótulos e renderização de novos endereços.
👀 Pré-visualização

🎯 Tarefas
Neste projeto, você aprenderá:
- Como inicializar o dropdown de província com dados do arquivo
data.js - Como implementar a funcionalidade do dropdown em cascata de estado-cidade
- Como adicionar um evento de clique aos rótulos na lista de tags, permitindo que o rótulo selecionado seja ativado e os outros desativados
- Como validar os campos de endereço, contato e número de telefone antes de salvar um novo endereço
- Como criar e anexar um novo item de lista de endereço à lista de endereços
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Manipular o DOM usando JavaScript
- Lidar com interações e eventos do usuário
- Implementar validação de formulário e tratamento de dados
- Criar e anexar dinamicamente elementos HTML
Configurar a Estrutura do Projeto
Nesta etapa, você configurará os arquivos e a estrutura do projeto. Siga os passos abaixo para concluir esta etapa:
Abra a pasta do projeto. A estrutura de diretórios é a seguinte:
├── index.html
├── css
├── images
└── js
├── data.js
└── index.js
Onde:
index.htmlé a página principal.cssé a pasta para arquivos de estilo.imagesé a pasta para imagens.js/data.jssão os dados para as províncias e cidades.js/index.jsé o arquivo JavaScript que precisa ser completado.
Clique no botão Go Live no canto inferior direito do WebIDE para executar o projeto.
Em seguida, abra "Web 8080" no topo da VM e atualize-o manualmente para ver a página.
Implementar o Menu Suspenso em Cascata Estado-Cidade
Nesta etapa, você aprenderá como implementar a funcionalidade do dropdown em cascata de estado-cidade.
- Localize a função
provincechange()no arquivojs/index.js. - Esta função é responsável por atualizar o dropdown de cidade quando um estado é selecionado.
- Primeiro, ela obtém uma referência ao elemento dropdown de província selecionado usando
document.getElementById("param_province"). - Em seguida, ela obtém uma referência ao elemento dropdown de cidade usando
document.getElementById("param_city"). - Depois, ela recupera o índice da província selecionada do dropdown de província usando
selectedProvince.value. - Ela então usa o índice da província selecionada para acessar as cidades correspondentes do array
townsno arquivodata.js. - Finalmente, ela define o comprimento das opções do dropdown de cidade para o número de cidades e itera pelas cidades para definir o texto e o valor de cada opção do dropdown.
// Implemente o dropdown em cascata de estado-cidade.
function provincechange() {
var selectedProvince = document.getElementById("param_province");
var city = document.getElementById("param_city");
var { value } = selectedProvince;
var cities = towns[value];
city.length = cities.length;
for (var i = 0; i < cities.length; i++) {
city.options[i].text = cities[i];
city.options[i].value = i;
}
}
Adicionar Evento de Clique aos Labels
Nesta etapa, você aprenderá como adicionar um evento de clique aos labels na lista de tags, o que ativará o estilo do label selecionado e desativará os outros labels.
- Localize a função
addClick()no arquivojs/index.js. - Esta função é responsável por adicionar o evento de clique aos labels.
- Primeiro, ela obtém uma referência a todos os elementos label usando
document.querySelectorAll(".mark a"). - Em seguida, ela obtém uma referência ao campo de entrada
param_mark, que armazenará o índice do label selecionado. - Depois, ela itera pelos elementos label e adiciona um ouvinte de evento de clique a cada um.
- Dentro do ouvinte de evento, ela primeiro remove a classe
activede todos os labels usandolabels.forEach((l) => l.classList.remove("active")). - Em seguida, ela adiciona a classe
activeao label clicado usandolabel.classList.add("active"). - Finalmente, ela define o valor do campo de entrada
param_markpara o índice do label clicado.
function addClick() {
var labels = document.querySelectorAll(".mark a");
var input = document.getElementById("param_mark");
labels.forEach((label, index) => {
label.addEventListener("click", () => {
labels.forEach((l) => l.classList.remove("active"));
label.classList.add("active");
input.value = index;
});
});
}
Validar e Salvar Informações de Endereço
Nesta etapa, você aprenderá como validar as informações de endereço e salvar o novo endereço na lista de endereços.
- Localize a função
saveInfo()no arquivojs/index.js. - Esta função é responsável por validar os campos de entrada e salvar o novo endereço.
- Primeiro, ela recupera os valores dos campos de entrada de província, cidade, endereço, marca, nome e número de telefone.
- Em seguida, ela verifica se os campos de província, endereço, nome ou número de telefone estão vazios. Se algum desses campos obrigatórios estiver vazio, ela exibe um diálogo de aviso.
- Se todos os campos obrigatórios forem preenchidos, ela cria um novo elemento de item de lista (
<li>) e o preenche com as informações de endereço. - O novo item de lista de endereço inclui o label (com base na marca selecionada), o endereço completo (província e cidade), o endereço e o nome e número de telefone.
- Finalmente, ela anexa o novo item de lista de endereço ao elemento
.address-liste chama a funçãoback()para redirecionar para a página de gerenciamento de endereços.
function saveInfo() {
var { value: provinceIdx, options: provinces } =
document.getElementById("param_province");
var { value: cityIdx, options: cities } =
document.getElementById("param_city");
var { value: address } = document.getElementById("param_address");
var { value: markId } = document.getElementById("param_mark");
var labelNodes = document.querySelectorAll(".mark a");
var label = labelNodes[markId].text;
var { value: name } = document.getElementById("param_name");
var { value: phone } = document.getElementById("param_phone");
if (provinceIdx === 0 || !address || !name || !phone) {
document.querySelector(".warning-dialog").style.display = "block";
return;
}
var addressListElement = document.querySelector(".address-list");
var newAddressElement = document.createElement("li");
newAddressElement.innerHTML = `
<div class="show-area">
<label class="school">${label}</label>
<span>${provinces[provinceIdx].text}${cities[cityIdx].text}</span>
</div>
<div class="show-address">
<span>${address}</span>
<a><img src="./images/edit.png" /></a>
</div>
<div class="show-info">
<span>${name}</span>
<span>${phone}</span>
</div>
`;
addressListElement.appendChild(newAddressElement);
back();
}
Seguindo estas etapas, você implementou com sucesso a funcionalidade "Adicionar Novo Endereço" no projeto. Parabéns!
O efeito final da página deve ser o seguinte:

Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



