Boa tarde. Minha dúvida é a seguinte. Quando você clica em um campo e depois tira o foco('blur') a mensagem de erro aparece. Mas se antes da pessoa clicar em qualquer campo do formulário ela clicar no botão de submit nada acontece. Como isso pode ser implementado ? Ou nesse projeto já está e eu errei em alguma coisa ? Se alguem puder me ajudar fico muito grato
import ehUmCPF from './valida-cpf.js';
import ehUmaIdadeValida from './valida-idade.js';
const camposDoFormulario = document.querySelectorAll('[required');
const formulario = document.querySelector('[data-formulario');
const mensagens = {
  nome: {
    valueMissing: 'O campo de nome não pode estar vazio.',
    patternMismatch: 'Por favor, preencha um nome válido.',
    tooShort: 'Por favor, preencha um nome válido.',
  },
  email: {
    valueMissing: 'O campo de e-mail não pode estar vazio.',
    typeMismatch: 'Por favor, preencha um email válido.',
    tooShort: 'Por favor, preencha um e-mail válido.',
  },
  rg: {
    valueMissing: 'O campo de RG não pode estar vazio.',
    patternMismatch: 'Por favor, preencha um RG válido.',
    tooShort: 'O campo de RG não tem caractéres suficientes.',
  },
  cpf: {
    valueMissing: 'O campo de CPF não pode estar vazio.',
    patternMismatch: 'Por favor, preencha um CPF válido.',
    customError: 'O CPF digitado não existe.',
    tooShort: 'O campo de CPF não tem caractéres suficientes.',
  },
  aniversario: {
    valueMissing: 'O campo de data de nascimento não pode estar vazio.',
    customError: 'Você deve ser maior que 18 anos para se cadastrar.',
  },
  termos: {
    valueMissing: 'Você deve aceitar nossos termos antes de continuar.',
  },
};
const tiposDeErro = [
  'valueMissing',
  'typeMismatch',
  'patternMismatch',
  'tooShort',
  'customError',
];
camposDoFormulario.forEach(campo => {
  campo.addEventListener('blur', () => verificaCampo(campo));
  campo.addEventListener('invalid', evento => evento.preventDefault());
});
formulario.addEventListener('submit', e => {
  e.preventDefault();
  const listaRespostas = {
    nome: e.target.elements['nome'].value,
    email: e.target.elements['email'].value,
    rg: e.target.elements['rg'].value,
    cpf: e.target.elements['cpf'].value,
    aniversario: e.target.elements['aniversario'].value,
  };
  localStorage.setItem('cadastro', JSON.stringify(listaRespostas));
  window.location.href = './abrir-conta-form-2.html';
});
function verificaCampo(campo) {
  let mensagem = '';
  campo.setCustomValidity('');
  if (campo.name === 'cpf' && campo.value.length >= 11) {
    ehUmCPF(campo);
  }
  if (campo.name === 'aniversario' && campo.value != '') {
    ehUmaIdadeValida(campo);
  }
  tiposDeErro.forEach(erro => {
    if (campo.validity[erro]) {
      mensagem = mensagens[campo.name][erro];
      console.log(mensagem);
    }
  });
  const mensagemErro = campo.parentNode.querySelector('.mensagem-erro');
  const validadorDeInput = campo.checkValidity();
  if (!validadorDeInput) {
    mensagemErro.textContent = mensagem;
  } else {
    mensagemErro.textContent = '';
  }
}