1
resposta

[Dúvida] botão de reiniciar não está funcionando como esperado

function sortear() {

    //é muito importante o uso do ''.value'', porque eu quero retornar o valor
    //atribuido ao inpunt, e não apenas o input em si.
    
    //outro detalhe, vou colocar dentro das variáveis parâmetros :
    //utilizarei o "parsseInt()" para converte o valor do input.


    let quantidadeDeNumero = parseInt(document.getElementById('quantidade').value);
    
    let numeroInicial = parseInt(document.getElementById('de').value);

    let numeroFinal = parseInt(document.getElementById('ate').value);


    //agora precisamos cirar um array(uma lista) para armazenar a quantidade de números sorteados

    let numerosSorteados = [];
    let numero;

    //quanto ao números que iremos colocar, precisamos criar uma codição de repetição
    //nesse caso vou usar "for"

    for(let i = 0; i < quantidadeDeNumero; i++){

        numero = seletorDeNumero(numeroInicial, numeroFinal);

        //agora preciso adicionar esse número dentro do array
        //mas para garantir que o número seja repetido, vou usar um "while" e "includes"

        while(numerosSorteados.includes(numero)){
            numero = seletorDeNumero(numeroInicial, numeroFinal);
        }

        numerosSorteados.push(numero);



    }

    //agora é necessário exbir esses números na tela
    let resultadoVisual = document.getElementById('resultado');

    let palavraResultado = quantidadeDeNumero > 1? 'números sorteados:' : 'número sorteado:';
    //Aqui eu usei um operador ternário para alterar a palavra de exbição de acordo com a quantidade de números.


    resultadoVisual.innerHTML = `<label class="texto__paragrafo">${palavraResultado} ${numerosSorteados}</label>`

    //jogo finalizado, agora eu preciso habilitar o botão de reiniciar para que o usuário,caso queira, possa fazer outra tentativa.

    mudarBotao();

    reiniciar();
}



//agora eu preciso criar uma função para pegar do número incial até o final
function seletorDeNumero(min,max){
    return Math.floor(Math.random() * (max - min + 1)) + min;
};
//agora eu já consigo chamar essa função na função sortear, basta alterar os valores


function mudarBotao() {
    let botao = document.getElementById('btn-reiniciar');
    if(botao.classList.contains('container__botao-desabilitado')){
     //botão -> consulta as listas de classes (classlist) -> verifica se contém (contains))a classe 'botao__desabilitado'
        
     botao.classList.remove('container__botao-desabilitado');
     botao.classList.add('container__botao');

    } else {
     botao.classList.remove('container__botao');
     botao.classList.add('container__botao-desabilitado');
    }
};





function reiniciar(){
    document.getElementById('quantidade').value = '';
    document.getElementById('de').value = '';
    document.getElementById('ate').value = '';
    document.getElementById('resultado').innerHTML = '<label class="texto__paragrafo">Números sorteados: nenhum até agora</label>';
    reiniciarJogo();

};

Quando aperto em sortear, os espaços para preencher ficam vazios e o botão de reiniciar fica ativo.

1 resposta

Oi Kaique! Como vai?

Na função sortear(), você está chamando a função reiniciar() logo após mudar o botão, o que está limpando os campos imediatamente após o sorteio. Isso faz com que pareça que o botão de reiniciar está ativando, mas, na verdade, ele já está limpando os campos.

Para corrigir isso, você deve remover a chamada para reiniciar() de dentro da função sortear(). A função reiniciar() deve ser chamada apenas quando você realmente clicar no botão de reiniciar, isso é, no seu arquivo HTML, e não durante o sorteio.

Aqui está como você pode ajustar a função sortear():

function sortear() {
    let quantidadeDeNumero = parseInt(document.getElementById('quantidade').value);
    let numeroInicial = parseInt(document.getElementById('de').value);
    let numeroFinal = parseInt(document.getElementById('ate').value);

    let numerosSorteados = [];
    let numero;

    for(let i = 0; i < quantidadeDeNumero; i++){
        numero = seletorDeNumero(numeroInicial, numeroFinal);
        while(numerosSorteados.includes(numero)){
            numero = seletorDeNumero(numeroInicial, numeroFinal);
        }
        numerosSorteados.push(numero);
    }

    let resultadoVisual = document.getElementById('resultado');
    let palavraResultado = quantidadeDeNumero > 1 ? 'números sorteados:' : 'número sorteado:';
    resultadoVisual.innerHTML = `<label class="texto__paragrafo">${palavraResultado} ${numerosSorteados}</label>`;

    mudarBotao();
}

Com essa alteração, a função reiniciar() não será chamada automaticamente após o sorteio, permitindo que o botão de reiniciar funcione como esperado quando você realmente clicar nele.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.