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

Mensagem impressa somente após o loop.

Vi que outras pessoas abriram outros tópicos com o mesmo problema, mas eles foram fechados sem a resolução.

O caso é que as mensagens a serem impressas pelo document.write()só aparecem após terminado o loop. Parece ser um problema do Chrome, pois no Firefox funciona sem problemas. Se acharem a solução para o Chrome, por favor informem.

Segue abaixo como ficou o meu código.

meta charset="UTF-8">
<script>

    function pulaLinha() {

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

    function mostra(frase) {

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

    function sorteia(n){
        var numero = Math.round(Math.random() * 100);
        if(numero >= 0 && numero <= n){
            return numero;

        }else{
            return sorteia(n);

        }
    }

    var numeroPensado = sorteia(parseInt(prompt("Informe ou número máximo para ser sorteado.")));
    var maxTentativas = parseInt(prompt("Consegue acertar em quantas tentativas?"));


    for (tentativas = 1; tentativas <= maxTentativas; tentativas ++) {
        var chute = parseInt(prompt("Qual foi o número pensado?"));        

        if(chute == numeroPensado) {
        mostra("Uau! Você acertou, pois eu pensei no " + numeroPensado);
        break;

        }else if(chute < numeroPensado){
        mostra("Você errou! Eu tinha pensado em um número maior que " + chute); 
        alert("Você tem mais " + (maxTentativas - tentativas) + " tentativas");

        }else if(chute > numeroPensado){
        mostra("Você errou! Eu tinha pensado em um número menor que " + chute);
        alert("Você tem mais " + (maxTentativas - tentativas) + " tentativas");

        }

    }

</script>
3 respostas

Fala, Rodrigo!!! Tudo bem? Como vai?

Realmente nós temos diferentes reações entre o Chrome e o Firefox.

Se executamos no Chrome ele não exibe enquanto não acaba o loop, e isso é dele mesmo! Já no Firefox vai imprimindo na tela conforme as passagens entre os else if(s).

Podemo fazer um outro teste. Veja o código abaixo:

<script>

// nesta função ocorrerá o bloqueio enquando não sair dela (pelo menos no Chrome. No Firefox não acontece esse bloqueio)
function setColorToRed() {
  document.body.style.background = 'red';
  alert('O vermelho aparecere depois de clicar em ok');
}

// Aqui não acontece nenhum bloqueio em ambos
function setColorToGreen() {
  document.body.style.background = 'green';
  setTimeout(function() {
    alert('O verde aparecere independente do ok');
  }, 0);
}
</script>

<button type="button" onclick="setColorToRed()">Bloqueando com vermelho</button>
<button type="button" onclick="setColorToGreen()">Sem bloqueio para o verde</button>

Agora vem o"porque"?

Na segunda função colocamos um setTimeout para que seja executado o alert o mais rápido possível e assim garante que o verde seja definido antes do alert ser exibido.

Resumindo...diferenças entre navegadores rs

É isso, Rodrigo!!!

Espero ter esclarecido!

Faça o teste, bons estudos e vamos em frente!!!

Pergunta, Cássio: quando você coloca function() como parâmetro de setTimeout, você está colocando qualquer função para ser executado no segundo 0, é isso? Ou seja, function() assume qualquer função?

solução!

Olá, Rodrigo! Tudo bom?

É isso mesmo! Cria-se para executar essa função nesse local em específico.

Dê olhada em funções anônimas que vai trazer bem esse conceito!

Um abraço, Rodrigo!!!

Qualquer coisa estamos aqui!