1
resposta

[Projeto] Validação dos campos

Feito o código até a metade, percebi que não foi implementado uma validação dos campos e itens sem nome e quantidade, ou só com um deles, podem ser adicionados. Pensando nisso eu tentei durante o curso implementar essa função, porém não consegui. Alguém consegue me dar uma luz? 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">
    <title>Mochila Pathfinder</title>
    <link rel="stylesheet" href="css/style.css">

    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet"> 
</head>
<body>
    <main class="conteudo">
        <div class="principal">
            <div class="mochila"></div>
            <form action="" class="adicionar" id="novoItem">
                <label for="item">Item</label>
                <input type="text" name="nome" id="nome">
                <label for="item">Quantidade</label>
                <input type="number" name="quantidade" id="quantidade">
                <input type="submit" value="Adicionar" class="cadastrar" id="botao">
            </form>
        </div>

        <ul class="lista" id="lista">

        </ul>
    </main>
    <script src="./js/main.js"></script>
</body>
</html>

-

-

JS

const form = document.getElementById("novoItem")
const lista = document.getElementById("lista")

const botao = document.getElementById("botao")
const campoNome = document.getElementById("nome")
const campoQuantidade = document.getElementById("quantidade")



const itens = JSON.parse(localStorage.getItem("itens")) || []

itens.forEach((elemento) => {
    criaElemento(elemento)
})


verificaCampos(campoNome, campoQuantidade, botao)

form.addEventListener("submit", (evento) => {
    evento.preventDefault()


    const nome = evento.target.elements['nome']
    const quantidade = evento.target.elements['quantidade']

    const existe = itens.find(elemento => elemento.nome === nome.value)

    const itemAtual = {
        "quantidade": quantidade.value,
        "nome": nome.value
    }

    if (existe) {
        itemAtual.id = existe.id
        atualizaElemento(itemAtual)

        itens[itens.findeIndex(elemento => elemento.id === existe.id)] = itemAtual
    } else {
        itemAtual.id = itens[itens.length - 1] ? (itens[itens.length - 1]).id + 1 : 0;

        criaElemento(itemAtual)
        itens.push(itemAtual)
    }


    localStorage.setItem("itens", JSON.stringify(itens))

    nome.value = ""
    quantidade.value = ""
})


function criaElemento(item) {
    const novoItem = document.createElement('li')
    novoItem.classList.add("item")

    const numeroItem = document.createElement('strong')
    numeroItem.innerHTML = item.quantidade
    numeroItem.dataset.id = item.id
    novoItem.appendChild(numeroItem)

    novoItem.innerHTML += item.nome

    novoItem.appendChild(botaoDeleta(item.id))

    lista.appendChild(novoItem)


}

function atualizaElemento(item) {
    document.querySelector("[data-id='" + item.id + "']").innerHTML = item.quantidade
    nome.value = ""
    quantidade.value = ""
}

function botaoDeleta(id) {
    const elementoBotao = document.createElement("button")
    elementoBotao.innerText = "X"

    elementoBotao.addEventListener("click", function () {
        deletaElemento(this.parentNode, id)
    })

    return elementoBotao
}

function deletaElemento(tag, id) {
    tag.remove()
    itens.splice(itens.findIndex(elemento => elemento.id === id), 1)

    localStorage.setItem("itens", JSON.stringify(itens))

}



function verificaCampos(campoNome, campoQuantidade, botao) {

    if (campoNome.value && campoQuantidade.value) {
        botao.disable = false
        return
    } else {
        botao.disable = true
    }

}

Acredito que o problema deve estar na validação ou na forma como estou chamando a função. Já verifiquei que a validação deveria funcionar, então acho que o código está sendo ignorado. Enfim, não consegui achar a lógica, se alguém puder ajudar, acredito que o projeto fica mais completo com essa função

1 resposta

Opa Jadson boa noite, eu adicionei o required nos inputs conforme abaixo, ele trava no frontend conforme o print: print da imagem com a mensagem Preencha o campo

            <form action="" class="adicionar" id="novoItem">
                <label for="item">Nome</label>
                <input type="text" name="nome" id="nome" required>
                <label for="item">Quantidade</label>
                <input type="number" name="quantidade" id="quantidade" required>
                <input type="submit" value="Adicionar" class="cadastrar">
            </form>

meu repositório : https://github.com/rodrigo0o0/mochila-de-viagem

fiz um pouco diferente do curso.

Att,