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

Prompt aparecendo sem interrupção.

Meus amigos boa noite! Estou na aula 7 de lógica de programação, na atividade 15, em que o professor melhora o jogo de adivinhação. Eu consigo fazer o programa funcionar, porém, algo me incomoda. No vídeo, a cada tentativa de chute do prof., independente de acerto ou erro, a frase da função "mostra" aparece na tela. Com o meu código abaixo, que eu revisei mil vezes, a cada tentativa, em caso de erro, não aparece nada na tela, apenas o prompt "Digite seu chute!". Após 3 tentativas incorretas, aparece na tela a seguinte mensagem (exemplo), de uma vez:

Você ERROU! O número é 4 Você ERROU! O número é 4 Você ERROU! O número é 4 FIM

Em caso de acerto, aparece a mensagem "Você ACERTOU!", obedecendo o break. Como faço para que, a cada tentativa, apareça uma mensagem na tela e, em caso de erro, depois apareça o prompt?

Muito obrigado

<meta charset="UTF-8">

<script>

function pulaLinha() {

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

function mostra(frase) { 

    document.write(frase);
    pulaLinha();
}

var numeroPensado = 4;

var tentativas = 1;

while(tentativas <= 3) {

    var chute = parseInt(prompt("Digite o seu chute!"));

    if(chute == numeroPensado) {

        mostra("Você ACERTOU!");
                break;

    } else {

        mostra("Voce ERROU! O número é " + numeroPensado);
    }

    tentativas++;
}

mostra("Fim");

</script>
11 respostas

Provavelmente é comportamento do navegador. No firefox funciona como no vídeo. Mas, testei no chrome e não funcionou.

Mas no vídeo ele usa o Chrome, não é? Eu uso o Chromium em casa.

Aqui no trabalho, eu testei no Edge e deu o mesmo erro.

Isso acontece porque o quando você usa as funções "alert" e "prompt" o navegador pausa tudo que está fazendo até finalizar o popup que aparece. Portanto, nesse momento, o navegador ainda não terminou de escrever na tela o texto passado para document.write e então pausa, esperando a resposta.

Continuando os estudos em HTML/JS você verá que há outras formas de fazer prompt (utilizando modais customizáveis, por exemplo) que não trava o navegador do usuário.

Se você inserir o console.log(frase); dentro da função mostra() e apertar ctrl+shift+i (abrir o modo de desenvolvedor do Chrome) verá que o texto que seria impresso na tela é mostrado no console.

solução!

Luis, muito obrigado pela resposta.

Mas o estranho é que ele deveria seguir exatamente como no vídeo, não é?

Sem a necessidade de eu usar o console.log

Ou estou viajando?

Muitos fatores podem influenciar como a versão do browser que ele está usando e o sistema operacional também.

Pode ficar despreocupado que não é nada relacionado ao código.

Não é comum os sites atuais usarem alert e prompt justamente por que ele bloqueia todo o navegador e não deixa o usuário fazer mais nada. Porém, eles são bem didáticos e por isso são mostrados nas aulas mais básicas.

Certo! Então, meu código meu código está ok? Sem erros, nem nada?

Sim. Tá correto. Se você testar em outo navegador verá um resultado similar ao do vídeo.

Ok!

Gabriel e Luis, muito obrigado pela Ajuda!

Fyi: Marquei a solução errada.

Sem problemas. O importante é que tenha solucionado sua dúvida.

Muito obrigado!