1
resposta

Cannot read properties of null (reading 'match')

Boa tarde, tentei implementar um if que se algum campo der erro ele não roda, mas está me voltando um erro no console que é Cannot read properties of null (reading 'match')

Estou fazendo estes testes apenas no 1 formulário

JavaScript


document.getElementById('formulario-01').addEventListener('submit', function(evento)    {

    evento.preventDefault();//Cancela o evento
    evento.stopPropagation();

    if(this.getAttribute('class').match(/'erro'/))    {//não roda o código se algum campo der erro
        return false;
    }

    let dados = new FormData(this);
    let objeto = {};
    let notas = [];

    for(let key of dados.keys())    {

        let numero = dados.get(key).match(/\d*/) ? Number(dados.get(key)) : 0// é um número

        if(!isNaN(numero))   {
            notas.push(numero);
        }

        //notas.push(parseInt(dados.get(key)));//adiciona itens no array;
    }

    console.log(notas);
    console.log(objeto);
    texto = aprovacao(notas);
    document.getElementById('resultado').innerHTML = texto;
});


function validaCampo(elemento)  {

    elemento.addEventListener('focusout', function(evento)    {//focusout->sai do objeto

    evento.preventDefault();

    if(this.value.match(/\d*/))    {
        document.querySelector('.mensagem').innerHTML = "Verifique o preenchimento";
        this.classList.add('erro');
        this.parentNode.classList.add('erro');
        return false;
    }else{
        document.querySelector('.mensagem').innerHTML = "";
        this.classList.remove('erro');
        this.parentNode.classList.remove('erro');
    }
});

}

function validaCampoNumerico(elemento)  {

    elemento.addEventListener('focusout', function(evento)    {//focusout->sai do objeto

    evento.preventDefault();

    if(this.value !='' && this.value.match(/[0-9]*/) && this.value >= 0 && this.value <=10)    {
        document.querySelector('.mensagem').innerHTML = "";
        this.classList.remove('erro');
        this.parentNode.classList.remove('erro');
    }else{
        document.querySelector('.mensagem').innerHTML = "Verifique o preenchimento";
        this.classList.add('erro');
        this.parentNode.classList.add('erro');
        return false;
    }
});
}

let camposObrigatorios =  document.querySelectorAll('input.obrigatorio');
let camposNumericos = document.querySelectorAll('input.numero'); 

for(let emFoco of camposObrigatorios)   {
    validaCampo(emFoco);
}

for(let emFoco of camposNumericos)  {
    validaCampoNumerico(emFoco)
}

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>JavaScript</title>
</head>
<body>
    <div class="container">

        <div class="mensagem"></div>

        <form id="formulario-01">
            <h2>Calculo de Média</h2>
            <p>Preencha as notas de 0 a 10</p>
            <input type="number" placeholder="Digite um número" class="numerico" name="N1">
            <input type="number" placeholder="Digite um número" class="numerico" name="N2">
            <input type="number" placeholder="Digite um número" class="numerico" name="N3">
            <input type="number" placeholder="Digite um número" class="numerico" name="N4">
            <button type="submit">Enviar</button>
        </form>

        <form id="formulario-02">
            <h2>Faça seu cadastro</h2>
            <input type="text" placeholder="digite seu nome" class="obrigatorio" name="nome">
            <input type="text" placeholder="digite seu email" class="obrigatorio email" name="email">
            <input type="text" placeholder="digite seu telefone" class="" name="telefone">
            <input type="text" placeholder="digite seu cep" class="numerico" name="cep">
            <input type="text" placeholder="digite seu cidade" class="obrigatorio" name="cidade">
            <input type="text" placeholder="digite seu uf" class="obrigatorio uf" name="uf"> 
            <button type="submit">Enviar</button>
        </form>

        <div id="resultado">

        </div>

    </div>

    <script type="text/javascript" src="./script.js"></script>
</body>
</html>
1 resposta

Olá Victor, tudo bem?

Desculpe a demora em retornar.

Esse erro ocorre porque você está tentando acessar a propriedade 'match' de um objeto nulo.

Para resolver esse problema, você pode verificar se o elemento que você está tentando acessar não é nulo antes de tentar acessar a propriedade 'match'. Você pode fazer isso adicionando uma condição antes de acessar a propriedade 'match', como no exemplo abaixo:

if (this.getAttribute('class') && this.getAttribute('class').match(/'erro'/)) {
  // não roda o código se algum campo der erro
  return false;
}

Espero que te ajude.

Um abraço.