2
respostas

[Bug] Projeto final não subtrai nas estatísticas, somente soma.

Já havia terminado o meu código e vi que não estava funcionando corretamente quando era subtraído algum dos controles, baixei o projeto final da aula do github do Pedro e o mesmo também não está subtraindo nada nas estatísticas, somente somando.

Código main.js

const controle = document.querySelectorAll("[data-controle]") const estatistica = document.querySelectorAll("[data-estatistica]")

const pecas = { "bracos": { "forca": 29, "poder": 35, "energia": -21, "velocidade": -5 },

"blindagem": {
    "forca": 41,
    "poder": 20,
    "energia": 0,
    "velocidade": -20
},
"nucleos":{
    "forca": 0,
    "poder": 7,
    "energia": 48,
    "velocidade": -24
},
"pernas":{
    "forca": 27,
    "poder": 21,
    "energia": -32,
    "velocidade": 42
},
"foguetes":{
    "forca": 0,
    "poder": 28,
    "energia": 0,
    "velocidade": -2
}

}

controle.forEach( (elemento) => { elemento.addEventListener('click', (evento) => { manipulaDados(evento.target.textContent, evento.target.parentNode) atualizaEstatistica(evento.target.dataset.peca) }) })

function manipulaDados(operacao, controle) { const peca = controle.querySelector("[data-contador]")

if(operacao === "-") {
    peca.value = parseInd(peca.value) - 1
} else {
    peca.value = parseInt(peca.value) + 1
}

}

function atualizaEstatistica(peca) { estatistica.forEach( (elemento ) => { elemento.textContent = parseInt(elemento.textContent) + pecas[peca][elemento.dataset.estatistica] }) }

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Na imagem todos os controles zerados pq somei e subtrair porem as estatísticas somente somaram.

2 respostas

Olá Vanessa, tudo bem?

Também cheguei nessa parte e achei estranho que mesmo diminuindo a quantidade de braços ou outros 'controles', o valor sempre era somado e não subtraído, não finalizei o curso ainda, não sei se mais na frente vai ser resolvido, porém, implementei no meu javascript (main.js) a verificação do controle, se é soma ou subtração, como na função manipulaDados, para ser incrimentado ou não nas estatisticas.

Estou fazendo da seguinte forma:

controle.forEach((elemento) => {
    elemento.addEventListener('click', (event) => {
        manipulaDados(event.target.dataset.controle, event.target.parentNode);
        atualizaEstatisticas(event.target.dataset.controle, event.target.dataset.peca);

    })
})

function manipulaDados(operacao, controle) {
    const peca = controle.querySelector("[data-contador]");

    if (operacao === '-') {
        peca.value = parseInt(peca.value) - 1;

    } else {
        peca.value = parseInt(peca.value) + 1;
    }
}

function atualizaEstatisticas(operacao, peca) {

    if (operacao === '-') {
        estatisticas.forEach((elemento) => {
            elemento.textContent = parseInt(elemento.textContent) - pecas[peca][elemento.dataset.estatistica]
        })

    } else {
        estatisticas.forEach((elemento) => {
            elemento.textContent = parseInt(elemento.textContent) + pecas[peca][elemento.dataset.estatistica]
        })
    }

}

Peguei basicamente a lógica da função que ele criou pra somar e diminuir e coloquei na atualizaEstatistica.

P.S: No seu código, identifiquei que na conversão para inteiro, utilizou parseInd (invés de parseInt).

Até mais :)

Eu vim no fórum procurando justamente esse problema caso alguém tivesse postado.

Muito bom, Guilherme!