Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Linha desnecessária? Ou não?

Tenho uma dúvida em relação a campo.setCustomValidity("");, que foi usada para limpar mensagens de erros, conforme abordado no treinamento. No entanto, ao remover esse setCustomValidity, o código continua funcionando da mesma forma. Isso ocorre porque a condição no final da função elimina a mensagem de erro se o campo for válido. Portanto, parece ser uma linha desnecessária adicionada pela instrutora, certo?

Segue a função completa:

function verificaCampo(campo) {
    let exibicaoMensagem = "";
    // Para limpar mensagens de erros
    campo.setCustomValidity("");
    
    if(campo.name == "cpf" && campo.value.length >= 11) {
        ehCpf(campo);
    }
    
    if(campo.name == "aniversario" && campo.value != '') {
        ehMaiorDeIdade(campo);
    }

    tiposDeErros.forEach(erro => {
        if(campo.validity[erro]) { // Se algum erro está do nosso array de erros existe dentro do validity (que tem os mesmos nomes)
            exibicaoMensagem = mensagensDeErro[campo.name][erro]; // Destrinchando até conseguir o erro respectivo do campo
            // Para melhor entendimento do destrinchamento
            console.log(mensagensDeErro) // Todas as chaves que possuem mensagens de erros
            console.log(mensagensDeErro[campo.name]) // Todos os valores do parametroDaFunção.name (nome, ou email, etc) atendido, sendo eles, nomes e as mensagens dos erros
            console.log(erro); // Nome do erro que passou na condição
            console.log(exibicaoMensagem); // Mensagem de erro do respectivo campo que passou na condição
        }
    })
    const mensagemErro = campo.parentNode.querySelector('.mensagem-erro'); // Para pegar o span do respectivo campo do parametro da nossa função
    const validadorDeInput = campo.checkValidity(); // Checando se está valido

    // Exibir o erro
    if(!validadorDeInput) {
        mensagemErro.textContent =  exibicaoMensagem;
    } else {
        mensagemErro.textContent = "";
    }
}
1 resposta
solução!

Oi Guilherme, tudo bem?

A parte do código que diz campo.setCustomValidity(""); pode parecer meio sem sentido,, mas ela tem um papel importante na lógica do código.

A função setCustomValidity é usada para definir uma mensagem de erro customizada que será exibida quando o campo do formulário não for válido. Quando você passa uma string vazia para essa função, como em campo.setCustomValidity("");, você está essencialmente dizendo "não há erro customizado aqui". Isso é útil para limpar quaisquer erros customizados que possam ter sido definidos anteriormente.

No seu código, a linha campo.setCustomValidity(""); é executada toda vez que a função verificaCampo é chamada. Isso garante que qualquer erro customizado anterior seja limpo antes de novas verificações de validade serem feitas.

Então, mesmo que o código pareça funcionar sem essa linha, removê-la pode levar a comportamentos inesperados em situações onde a função verificaCampo é chamada múltiplas vezes. Por exemplo, se um erro customizado for definido em uma chamada à função verificaCampo, e então a função for chamada novamente sem que haja um erro, a mensagem de erro customizado anterior ainda será exibida, a menos que seja explicitamente limpa.

Espero ter te ajudado a entender melhor.

Um abraço e bons estudos.