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

Como faço para atribuir valores de diferentes <inputs/> para diferentes variáveis?

Redigi o código abaixo, mas estou com dificuldades em fazer com que as variáveis "condominio" e "luz" recebam os valores que repasso através dos . Ao final da execução elas sempre retornam como "undefined" e os cálculos retornam "NaN".

<meta charset="UTF-8">
<script>
function pulaLinha() {

    document.write ("<br><hr><br>");
}

function mostra (texto) {

    document.write ("<big>" + texto + "</big>");
    pulaLinha();
}    
var mes = prompt ("Em qual mês estamos?");

mostra ("Contas do mês de " + mes + ".");
pulaLinha();
mostra ("Condomínio: " + "<input id='condo'/>" );
mostra ("Energia Elétrica: " + "<input id='energ'/>");
mostra ("Netflix: R$ 45,90");
mostra ("Amazon Prime: R$ 9,90");
mostra ("Internet: R$ 149,90");
pulaLinha();
document.write ("<button> Calcular </button>");

var condominio = parseFloat(document.getElementById("[id=condo]"));
var luz = parseFloat(document.getElementById ("[id=energ]"));
var netflix = 45.9;
var amazon = 9.9;
var internet = 149.9;
var botao = document.querySelector("button");

function calcular () {
var despesasTotais = condominio.value + luz.value + netflix + amazon + internet;
var despesasIndividuais = despesasTotais/2;
mostra ("Condomínio: R$ " + condominio.value);
mostra ("Energia Elétrica: R$ " + luz.value);
mostra ("Netflix: R$ 45,90");
mostra ("Amazon Prime: R$ 9,90");
mostra ("Internet: R$ 149,90");
mostra ("O valor total das despesas é: R$ " + despesasTotais);
mostra ("Como somos em dois, ficaria R$ " + despesasIndividuais + " para cada um.");
}

botao.onclick = calcular;
</script>
2 respostas
solução!

Fala, Smailey!

Algumas coisas (E aqui fui eu futucando, se algum instrutor puder explicar de forma mais prática, ótimo!):

Pelo que eu vi a sintaxe do "" document.getElementById("[id=condo]") "" tá errada, pelo menos pro HTML, ali entre os parenteses o id tem que ser como você declarou lá em cima no input, ou seja, 'condo' ao invés de "[id=condo]" e 'energ' ao invés de "[id=energ]" (imagino que isso tenha alguma coisa a ver com o tipo de biblioteca sendo usada). E logo depois de fechar o parenteses você tem que colocar o .value para ele resgatar o que foi digitado nas caixinhas.

Dito isso, outra coisa que eu notei mexendo foi que a partir do momento que o programa é executado, ele já tenta resgatar o valor de condominio e luz antes de você apertar o botão pra executar a função de cálculo (que a partir daí pegaria os dados das caixinhas e faria a conta), então pelo menos as variáveis de condominio e luz tem que ser passadas para dentro da função de cálculo, para que só ocorra a geração do número e a realização da conta a partir do momento do clique do botão... As outras são fixadas então não faz diferença.

Por último, eu troquei todos esses .value em condominio e luz que você colocou dentro da função calcular inicialmente pelo nome das variáveis, que é o que você de fato utiliza no cálculo, pelo que eu entendi o .value serve para recuperar o input feito nas caixinhas e aí sim gerar o seu número na variável.

De novo, se algum instrutor puder explicar de forma mais prática isso agradeço, eu ainda me bato falando dessas coisas mas acho que a essência ta aí.

OBS: Eu joguei uma função para arredondar os resultados finais até as duas primeiras casas decimais (famosos centavos) e coloquei em despesasTotais e despesasIndividuais para facilitar o cálculo, que alguns resultados com base em certos valores tava dando 00.0000000000 casas...

O código corrigido tá na postagem:

<meta charset="UTF-8">
<script>
function pulaLinha() {

    document.write ("<br><hr><br>");
}

function mostra (texto) {

    document.write ("<big>" + texto + "</big>");
    pulaLinha();
}    

function arredondar(valor, decimais) {
    return (parseFloat(valor).toFixed(decimais));
}

var mes = prompt ("Em qual mês estamos?");

mostra ("Contas do mês de " + mes + ".");
pulaLinha();
mostra ("Condomínio: " + "<input id='condo'/>" );
mostra ("Energia Elétrica: " + "<input id='energ'/>");
mostra ("Netflix: R$ 45,90");
mostra ("Amazon Prime: R$ 9,90");
mostra ("Internet: R$ 149,90");
pulaLinha();
document.write ("<button> Calcular </button>");

var netflix = 45.9;
var amazon = 9.9;
var internet = 149.9;
var botao = document.querySelector("button");

function calcular () {
var condominio = parseFloat(document.getElementById('condo').value);
var luz = parseFloat(document.getElementById('energ').value);
var despesasTotais = arredondar((condominio + luz + netflix + amazon + internet), 2);
var despesasIndividuais = arredondar((despesasTotais/2), 2);
mostra ("Condomínio: R$ " + condominio);
mostra ("Energia Elétrica: R$ " + luz);
mostra ("Netflix: R$ 45,90");
mostra ("Amazon Prime: R$ 9,90");
mostra ("Internet: R$ 149,90");
mostra ("O valor total das despesas é: R$ " + despesasTotais);
mostra ("Como somos em dois, ficaria R$ " + despesasIndividuais + " para cada um.");
}

botao.onclick = calcular;
</script>

Incrível Paulo! Não só encontrou o que estava impedindo de funcionar, como explicou super bem os passos. Pelo jeito eu estava identificando os id's de forma equivocada mesmo. Mas agora acho que entendi como eles e o ".value" agem. (ao menos já tenho um exemplo de como fazer funcionar!) A função que você implementou também cai como uma luva! Muito obrigado pela ajuda e pela explicação! Abraço!