Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erros no código

Boa tarde!! Meu código não está funcionando corretamente, poderiam me ajudar? Essa é a mensagem de erro que aparece: Uncaught TypeError: Cannot read properties of undefined (reading 'força') at main.js:56:90 at NodeList.forEach () at atualizaEstatisticas (main.js:55:18) at HTMLUnknownElement. (main.js:40:9)

5 respostas

HTML:

Robotron ROBOTRON 2000
    <section class="box estatisticas">
        <div class="estatistica">
            <p class="estatistica-titulo">Força</p>
            <div class="estatistica-valor">
                <p class="estatistica-numero" data-estatistica="força"></p>
            </div>
        </div>
        <div class="estatistica">
            <p class="estatistica-titulo">Poder</p>
            <div class="estatistica-valor">
                <p class="estatistica-numero" data-estatistica="poder"></p>
            </div>
        </div>
        <div class="estatistica">
            <p class="estatistica-titulo">Energia</p>
            <div class="estatistica-valor">
                <p class="estatistica-numero" data-estatistica="energia"></p>
            </div>
        </div>
        <div class="estatistica">
            <p class="estatistica-titulo">Velocidade</p>
            <div class="estatistica-valor">
                <p class="estatistica-numero" data-estatistica="velocidade"></p>
            </div>
        </div>
    </section>

    <section class="equipamentos">
        <form action="" class="montador">
            <div class="box montador-conteudo">
                <div class="peca">
                    <label for="" class="peca-titulo">Braços</label>
                    <div class="controle">
                        <buttom class="controle-ajuste" data-controle="-" data-peca="bracos">-</buttom>
                        <input type="text" class="controle-contador" value="00" data-contador>
                        <buttom class="controle-ajuste" data-controle="+">+</buttom>
                    </div>
                </div>
                <hr class="linha">
                <div class="peca">
                    <label for="" class="peca-titulo">Blindagem</label>
                    <div class="controle">
                        <buttom class="controle-ajuste" data-controle="-" data-peca="blindagem">-</buttom>
                        <input type="text" class="controle-contador" value="00" data-contador>
                        <buttom class="controle-ajuste" data-controle="+">+</buttom>
                    </div>
                </div>
                <hr class="linha">
                <div class="peca">
                    <label for="" class="peca-titulo">Núcleos</label>
                    <div class="controle">
                        <buttom class="controle-ajuste" data-controle="-" data-peca="nucleos">-</buttom>
                        <input type="text" class="controle-contador" value="00" data-contador>
                        <buttom class="controle-ajuste" data-controle="+">+</buttom>
                    </div>
                </div>
                <hr class="linha">
                <div class="peca">
                    <label for="" class="peca-titulo">Pernas</label>
                    <div class="controle">
                        <buttom class="controle-ajuste" data-controle="-" data-peca="pernas">-</buttom>
                        <input type="text" class="controle-contador" value="00" data-contador>
                        <buttom class="controle-ajuste" data-controle="+">+</buttom>
                    </div>
                </div>
                <hr class="linha">
                <div class="peca">
                    <label for="" class="peca-titulo">Foguetes</label>
                    <div class="controle">
                        <buttom class="controle-ajuste" data-controle="-" data-peca="foguetes">-</buttom>
                        <input type="text" class="controle-contador" value="00" data-contador>
                        <buttom class="controle-ajuste" data-controle="+">+</buttom>
                    </div>
                </div>
            </div>
            <input type="submit" value="Iniciar produção" class="producao" id="producao">
        </form>
    </section>
</main>

<script src="js/main.js"></script>

JS:

const controle = document.querySelectorAll("[data-controle]")
const estatisticas = 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.dataset.controle, evento.target.parentNode)
        atualizaEstatisticas(evento.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(peca) {
    estatisticas.forEach( (elemento) => {
        elemento.textContent = parseInt(elemento.textContent) + console.log(pecas[peca]) [elemento.dataset.estatistica]
    })
}

`

solução!

Olá Joyce, tudo bem? Pelo erro que você postou, parece que o seu código está tentando acessar uma propriedade chamada 'força' de um objeto que não foi definido. Na linha 56, coloque um console.log() antes de tentar acessar a propriedade 'força' para verificar se o objeto está sendo definido corretamente. Além disso, verifique se a variável que armazena o objeto não está sendo sobrescrita em algum momento do código. Espero ter ajudado e bons estudos!

Obrigadaa!!!

Por nada! Fico feliz em ajudar, valeu :)