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

As mensagens de erro de login dentro do else no while só são exibidas no final

Olá, estou no exercício "Simulando uma tela de login" do curso "Curso Lógica de programação I: Os primeiros programas com Javascript e HTML"

e não consegui fazer a mensagem de

mostra("Usuário ou senha inválidos");

Seja exibida a cada tentativa sem sucesso. Elas são exibidas apenas quando o while termina.

O código todo está assim:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Login do Sitema</title>
</head>
<body>
    <script type="text/javascript">

        function testaParamentroNulo(parametro) {
            return typeof(parametro) == "undefined";
        }

        function mostra(mensagem) {
            document.write("<big>" + mensagem + "</big>");
            pulaLinha();
        }

        function pulaLinha(numeroLinhas) {
            if(testaParamentroNulo(numeroLinhas)) {
                document.write("<br><hr>");
            } else {
                for(var i = 0; i < numeroLinhas; i++) {
                    document.write("<br>");
                }
                document.write("<br><hr>");
            }
        }

        function testaLogin(usuario, senha) {
            if(usuario == usuarioSistema && senha == senhaUsuarioSistema) {
                return true;
            }
            return false;
        }

        var usuarioSistema = "admin" ;
        var senhaUsuarioSistema = "123";
        var numeroMaxTentativasLogin = 3;
        var tentativasLogin = 0;
        var usuarioAutenticado = false;


        while(tentativasLogin < 3 && !usuarioAutenticado) {
                var usuario = prompt("Digite o nome de usuário: ");
                var senha = prompt("Digite a senha: ");

                if(testaLogin(usuario, senha)) {
                    usuarioAutenticado = true;
                    mostra("Login efetuado com sucesso.");
                } else {
                    mostra("Usuário ou senha inválidos");
                }

                tentativasLogin++;

                if(tentativasLogin == 3) {
                    mostra("O número máximo de tentativas foi excedida, tente     novamentes mais tarde!");
                }

            } 

    </script>
</body>
</html>

Se o usuário e senha estiverem corretos funciona beleza.

Se exceder as 3 tentativas também para de boa.

4 respostas

Fala ai Bruno, de boa ?

Acredito que você gostaria que seu else mostrasse um alert, igual foi feito com prompt certo ?

Pois enquanto está no while ele vai prender a atenção para os prompts até você acertar.

solução!

Boa tarde, Bruno! Como vai?

Conversando com o mestre Flávio, ele me disse que após a gravação do curso, o Google Chrome passou a funcionar da forma como vc tem visto, ou seja, com o conteúdo do document.write() sendo exibido na tela apenas no final do processamento de todo o código Javascript pq é somente nesse momento final que o Javascript tem garantia de que o DOM está completo e não será alterado.

Aprendizado para a vida:

O document.write() tem suas informações apresentadas apenas no final do processamento do Javascript. Enquanto isso, funções como o alert() e o prompt() aparecem no momento em que são invocadas por não serem ligadas diretamente à construção do DOM.

Grande abraço e bons estudos!

Muito obrigado Matheus e Gabriel...

Entendi Gabriel, imaginei que fosse alguma coisa relacionado ao processamento mas não tinha entendido o ocorrido...

Por nada, Bruno! Sempre que tiver qualquer dúvida é só mandar aqui no fórum!

Grande abraço e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software