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

Dúvidas sobre o código referente ao Projeto Final {JavaScript}

Olá, como vão? Consegui resolver o desafio final sem problemas, no entanto estou com algumas dúvidas: 1)Por que quando eu chamo uma função após o onclick eu não posso colocar os ()?, como por exemplo, na linha em que aparece clicou.onclick=executar; ? Já vi isso acontecendo em outros exercícios também. 2)tentei inicialmente declarar a variável ok como true, mas aparentemente não estava lendo. Existe alguma forma específica de se trabalhar com variáveis booleanas em JavaScript? 3)Finalmente, porque que quando chama a função executar meus botões e campos de envio somem da tela? A função executa normalmente o que deveria, mas todo o resto que criei em HTML desaparece. Existe alguma forma de se corrigir isso?

Abaixo o código. Caso alguém tenha alguma outra sugestão para melhoria, pode falar também :)

<meta charset="UTF-8"/>
Seja bem vindo à loteria! Chute os números abaixo para começar!
<br> <br>
Número 1:
<input type="text" id="numero1"/> <br>
Número 2:
<input type="text" id="numero2"/> <br>
Número 3:
<input type="text" id="numero3"/> <br>
Número 4:
<input type="text" id="numero4"/> <br>
Número 5:
<input type="text" id="numero5"/> <br>
Número 6:
<input type="text" id="numero6"/> <br>
<input type="submit" id="enviar" value="Enviar!"   />

<script>

var sorteia = function (numero){
    /*Para conseguirmos alterar a função Math.random() para mostrar os valores que quisermos, usamos o seguinte modelo:
Math.random() * (max - min) + min; */
 numero=parseInt(((Math.random() * 59) + 1));
 return numero;
}

var recolhe = function(){
        var elemento1=document.getElementById("numero1");
        escolhidos[0]=elemento1.value;
        var elemento2=document.getElementById("numero2");
        escolhidos[1]=elemento2.value;
        var elemento3=document.getElementById("numero3");
        escolhidos[2]=elemento3.value;
        var elemento4=document.getElementById("numero4");
        escolhidos[3]=elemento4.value;
        var elemento5=document.getElementById("numero5");
        escolhidos[4]=elemento5.value;
        var elemento6=document.getElementById("numero6");
        escolhidos[5]=elemento6.value;
}


var sorteador = function(){
    var ok=1;

    for(var i=0; i<6; i++){
        var provisorio=sorteia(provisorio);

        for(var j=0;j<6;j++){
            if(provisorio==sorteados[j]){
                ok=0;}

            while (ok==0){
                provisorio=sorteia(provisorio);
                if(provisorio!=sorteados[j]){
                    ok=1;} }
        }


        sorteados[i]=provisorio;
    }

}

var comparar = function(){
    var acertos=0;
    var listaacerto=[];
    var k=0;

    for(var i=0;i<6;i++){
        for (var j=0; j<6; j++){

            if(escolhidos[i]==sorteados[j]){
                acertos++;
                listaacerto[k]=escolhidos[i];
                k++; }
        }
    }

    if(k==0){
        document.write("<br><br>Lamentamos, você não acertou nada.");
    } else if (k>0 && k<4){
        document.write("<br><br>Você acertou somente " + k +" números.");
    }
    else {
        document.write("<br><br>UAU! Você acertou "+ k+ " números!");
    }

    if(k>0){
        document.write("<br>Números que você acertou ");
        for(var i=0;i<k;i++){
            document.write(";")
            document.write(listaacerto[i]);
        }
    }
}

var mostrar = function(){
    document.write("Esses sao os numeros que você escolheu:"+ escolhidos[0]+ ","+ escolhidos[1]+ ","+escolhidos[2]+ ","+escolhidos[3]+ ","+escolhidos[4]+ ","+escolhidos[5]+ ".");
    document.write("<br>Esses sao os numeros sorteados:"+ sorteados[0]+ ","+ sorteados[1]+ ","+sorteados[2]+ ","+sorteados[3]+ ","+sorteados[4]+ ","+sorteados[5]+ "."+"<br><br>");
    }

var executar=function(){
    recolhe();
    sorteador();
    mostrar();
    comparar();
    document.write("<br>Havia exatamente 1 chance em 46656000000 de você acertar todos os números.");
}

var sorteados =[];
var escolhidos=[]

var clicou=document.getElementById("enviar");
clicou.onclick=executar;


</script>
4 respostas

1)O onclick espera espera uma função então vc precisa só passar o nome da função, ou quando vc usa uma função é uma função anonima

Ex

Btn.onclick=function(){alert("gg");

Ou vc pode usar o addEventListner

2) Nunca tive problema com bool no js

No código em recolher vc pode pegar todos os inputs e fazer um for e setar o valor sem ter que criar essa quantidade de variáveis que vc usa apenas para pegar o valor , voce pode pegar o valor no final do document

Olá Alan, muito obrigada pelas respostas! A única coisa que ainda estou em dúvida é a questão do for, em recolher. Inicialmente eu pensei sim em criar um, mas aí me deparei com um problema: na hora de passar o valor, o que acontece é que cada posição do vetor irá receber um elemento distinto, que por sua vez não pode (ou não faria sentido ser criado um array para isso, uma vez que acabaria com a mesma quantidade de linhas de código) ser expresso como algo incrementável. Exemplifico:

var elemento1=document.getElementById("numero1");
        escolhidos[0]=elemento1.value;
var elemento2=document.getElementById("numero2");
        escolhidos[1]=elemento2.value;

repare que o varelemento1 tem de receber o id numero1. Isso é um texto, com os nomes respectivos dos "itens" que estamos manipulando. Até onde eu saiba não há como fazer algo como elementoi, e aí um i++. A mesma coisa para o elemento1.value .

Alguma ideia para driblar esse problema e declarar a informação de outra forma que aí sim possibilite o incremento, e consequentemente, o uso de um for?

Não sei se tem como, mas de qualquer forma, desde já muito obrigada pela atenção :)

solução!

Olá tem como vou olhe como converti seus metodo

var recolhe = function() {
      var _imputsText = document.querySelectorAll('input[type=text]');
      for (var i = 0; i < _imputsText.length; i++) {
        escolhidos[i] = _imputsText[i].value;
      }

    }

existe essa função que é o querySelectorAll ele é igual ao $() do jQuery ele vai pegar todos os inputs do tipo text

Agora outro metodo que ficou bem clean é este

  var mostrar = function() {
      document.write("Esses sao os numeros que você escolheu:" + escolhidos.toString()+".");
      document.write("<br>Esses sao os numeros sorteados:" + sorteados.toString() + "." + "<br><br>");
    }

algumas funções tem o toString já implementado nelas

espero que te ajudado , caso sim me marque como solução :)

Adorei a solução, ficou ótima!