Oi, Plínio,
O evento de input só é acionado quando o valor do elemento.filtro-paciente é alterado pelo usuário. Portanto, se você atualizar a página, o evento não será acionado automaticamente.
Uma solução para esse problema é envolver a lógica do filtro em uma função separada e chamar essa função tanto no evento de input quanto no evento de carregamento da página. Dessa forma, o filtro será aplicado quando o usuário interagir com o elemento de filtro ou quando a página for carregada.
let filtrarPaciente = document.querySelector(".filtro-paciente");
let pacientes = document.querySelectorAll(".paciente");
function filtrarPacientes() {
if (filtrarPaciente.value.length > 0) {
for (let indicePaciente = 0; indicePaciente < pacientes.length; indicePaciente++) {
let filtroPaciente = pacientes[indicePaciente];
let nomePaciente = filtroPaciente.querySelector(".info-nome");
let filtroNome = nomePaciente.textContent;
let expReg = new RegExp(filtrarPaciente.value, "i");
if (!expReg.test(filtroNome)) {
filtroPaciente.classList.add("invisivel");
} else {
filtroPaciente.classList.remove("invisivel");
}
}
} else {
for (let indicePaciente = 0; indicePaciente < pacientes.length; indicePaciente++) {
let filtroPaciente = pacientes[indicePaciente];
filtroPaciente.classList.remove("invisivel")
}
}
}
filtrarPaciente.addEventListener("input", filtrarPacientes);
window.addEventListener("load", filtrarPacientes);
Para que o novo paciente receba a legenda colorida, precisamos adicionar a função adicionaLegenda Colorida()
no evento de clique adicionado à variável botaoAdicionarPaciente
que está na linha e do arquivo "form.js". Ficaria assim:
botaoAdicionarPaciente.addEventListener("click", function (event) {
event.preventDefault();
let formularioPaciente = document.querySelector("#form-adicionar");
let paciente = obterPacienteDoFormulario(formularioPaciente);
let erroNome = verificarNome(paciente);
if (erroNome.length > 0) {
let msgErroNome = document.querySelector("#erro-nome")
msgErroNome.textContent = erroNome;
return msgErroNome;
}
let erroPeso = verificarPeso(paciente);
if (erroPeso.length > 0) {
let msgErroPeso = document.querySelector("#erro-peso")
msgErroPeso.textContent = erroPeso;
return msgErroPeso;
}
let erroAltura = verificarAltura(paciente);
if (erroAltura.length > 0) {
let msgErroAltura = document.querySelector("#erro-altura")
msgErroAltura.textContent = erroAltura;
return msgErroAltura;
}
let erroGordura = verificarGordura(paciente);
if (erroGordura.length > 0) {
let msgErroGordura = document.querySelector("#erro-gordura")
msgErroGordura.textContent = erroGordura;
return msgErroGordura;
}
adicionarPacienteNaTabela(paciente);
adicionaLegendaColorida();
formularioPaciente.reset();
});
Ao adicionar um novo paciente manualmente, também percebi que ao filtrar um paciente que já estava na lista, o paciente recém-adicionado era incluído no filtro, ou seja, filtrando o nome pesquisado e o nome do último paciente adicionado manualmente. Podemos solucionar isso, modificando a função adicionarPacienteNaTabela(paciente)
para atualizar a lista de pacientes e, em seguida, chamar a função filtrarPacientes()
para aplicar o filtro novamente. Assim, o novo paciente será incluído no filtro. Ficaria assim:
function adicionarPacienteNaTabela(paciente) {
let itemTr = montarTr(paciente);
let tabela = document.querySelector("#tabela-pacientes");
tabela.appendChild(itemTr);
pacientes = document.querySelectorAll(".paciente"); // Atualiza a lista de pacientes
filtrarPacientes(); // Aplica o filtro novamente
}
Espero ter ajudado. Caso tenha dúvidas, estarei à disposição. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!