No código abaixo, dentro da função valida(), atente para a seguinte linha:
let mensagem = buscaMensagem(input.validity, tipoDeInput);
Dentro do buscaMensagem, antes do return, o console.log me mostra a string que eu gostaria de buscar. Porém, quando eu dou console.log da mensagem, ele me mostra undefined. O que está acontecendo?
"use strict"
export function valida(input){
const tipoDeInput = input.dataset.tipo;
const campoDeErro = input.parentElement.querySelector('.input-mensagem-erro');
if (validadores[tipoDeInput]){
validadores[tipoDeInput](input);
}
if (input.validity.valid){
input.parentElement.classList.remove('input-container--invalido');
}else{
input.parentElement.classList.add('input-container--invalido');
let mensagem = buscaMensagem(input.validity, tipoDeInput);
// esse console.log devolve undefined
console.log(mensagem);
campoDeErro.innerHTML = mensagem;
}
}
const mensagensDeErro = {
nome: {
valueMissing: 'O campo nome precisa ser preenchido.',
},
email: {
typeMismatch: 'Você precisa colocar um e-mail válido.',
valueMissing: 'O campo email precisa ser preenchido.',
},
senha: {
patternMismatch: 'A senha precisa ter pelo menos 6 caracteres e deve conter pelo menos uma letra um número.',
valueMissing: 'O campo senha precisa ser preenchido.',
},
dataNascimento: {
customError: 'Só é permitido o cadastro para maiores de 18 anos.',
valueMissing: 'O campo data de nascimento precisa ser preenchido.',
},
}
/* Lista de erros possíveis, na ordem de validação */
const errosPossiveis = ['valueMissing', 'typeMismatch', 'patternMismatch', 'customError'];
/*
Objeto com chave validadores e valor de respectivas funções validadoras
*/
const validadores = {
dataNascimento: input => validaDataNascimento(input),
}
function buscaMensagem(validade, tipo){
errosPossiveis.forEach(erro => {
if (validade[erro]){
//esse console log devolve o string correto da constante mensagens de erro
console.log(mensagensDeErro[tipo][erro]);
return mensagensDeErro[tipo][erro];
}
//Mensagem padrão caso não encontre o erro;
return 'Este campo não está válido';
});
}
function validaDataNascimento(input){
/*
Omitido, não é importante aqui
*/
}