6
respostas

Sempre ao rodar pela primeira o jogo, são adiciona 2 usuários na tabela, e o usuário fixo no html não remove

eu notei que quando eu carrego a página e faço o primeiro jogo são adicionados 2 usuários de uma vez só na tabela, e também não consigo remover o usuário que deixamos fixo no html, mas consigo remover os novos.

placar.js
// função que insere o jogador na tabela com sues pontos conquistados
function inserePlacar(){
    var corpoTabela = $(".placar").find("tbody");
    var usuario = "André Vieira";
    var numPalavras = $("#contador-palavras").text();
    var linha = novaLinha(usuario,numPalavras);
    linha.find(".botao-remover").click(removeLinha);
    corpoTabela.prepend(linha);
}
// cria linhas e colunas passando os jogadores através do javascript direto no html
function novaLinha(usuario,palavras){
    var linha = $("<tr>");
    var colunaUsuario = $("<td>").text(usuario);
    var colunaPalavras = $("<td>").text(palavras);
    var colunaRemover = $("<td>");
    var link = $("<a>").addClass("botao-remover").attr("href","#");
    var icone = $("<i>").addClass("small").addClass("material-icons").text("delete");
    link.append(icone);
    colunaRemover.append(link);
    linha.append(colunaUsuario);
    linha.append(colunaPalavras);
    linha.append(colunaRemover);
    console.log(linha);
    return linha;
}
//função para remover linha
function removeLinha(event){
 event.preventDefault();//segura o evento de subir a páginas ao clicar no botão
  $(this).parent().parent().remove();//selecionando o pai do pai para remover
}
main.js
//seleciona o tempo inicia que está definido no html e passa seu valor para está variável
        var tempoInicial = $("#tempo-digitacao").text();
         //selecionando o textarea e passando seu valor para variável
        var campo = $(".campo-digitacao");
// inicializa todas as functions
$(function(){
    atualizaTamanhoFrase();
    inicializaContadores();
    inicializaCronometro();
    inicializaMarcadores();
    $("#botao-reiniciar").click(reiniciaJogo);
});
function atualizaTamanhoFrase(){
          // pega classe frase do html e o seu conteúdo
        var frase = $(".frase").text();
        // quebra a frase onde tem espaços em branco colocando em um array
        var numPalavras = frase.split(" ").length;
        //pega id html e passa seu conteúdo para a variável
        var tamanhoFrase = $("#tamanho-frase");
        // coloca o valor de numPlavaras em tamanhoFrase
        tamanhoFrase.text(numPalavras);
}
function inicializaContadores(){
        //criando uma funcção que detecta os caractéres e a quantidade de plavras no textarea
        campo.on("input",function(){
          var conteudo = campo.val();
          //expressao regular para corrigir a falha nos spaces e a quantidade de palvaras
          var qtdPalavras = conteudo.split(/\S+/ ).length-1;
          $("#contador-palavras").text(qtdPalavras);
          var qtdCaracteres = conteudo.length;//passa o tamanho da variável para qtdCaracteres
          $("#contador-caracteres").text(qtdCaracteres);
          });
}
function inicializaCronometro(){
        //pega o valor de texto no html e passa para variável
        var tempoRestante = $("#tempo-digitacao").text();
        //função que foca no textarea e decrementa o tempo
        campo.one("focus",function(){
        // criando um ID para setInterval
         var cronometroID = setInterval(function(){
            tempoRestante --;
            // o tempoRestante e passado para o html e vai decremetnando
              $("#tempo-digitacao").text(tempoRestante);
                //condicional para desabilidar o textarea no html
                if (tempoRestante < 1) {
                  clearInterval(cronometroID);
                  finalizaJogo();
                }
              },1000);//milisegundos
    });
}
function finalizaJogo(){
                campo.attr("disabled",true); // atribuie o html como disabled
                //classe do css para mudar a cor quando desativar o textarea
                campo.addClass("campo-desativado");
                inserePlacar();
}
// essa função e responsável por comparar o texto e o digitado se está
// certo ou não retornando a borda verde ou vermelha
function inicializaMarcadores(){
      var frase = $(".frase").text();
        campo.on("input", function(){
            var digitado = campo.val();
            if (frase.startsWith(digitado)) {
              campo.addClass("borda-verde");
              campo.removeClass("borda-vermelha");
            }else{
              campo.addClass("borda-vermelha");
              campo.removeClass("borda-verde");
            }
        });
    }
//function que permite clicar no botão reiniciar e o tempo voltar ao seu estádo original
//, limpar o campo de digitação e zerar os contadores de palvaravras e caracteres
    function reiniciaJogo(){
            //como o campo estava desabilitado agora eu habilito novamente
            campo.attr("disabled",false);
            //deixa o campo textarea seu valor em branco
            campo.val("");
            //os contadores seram =0 ao usar o botão reiniciar
            $("#contador-palavras").text("0");
            $("#contador-caracteres").text("0");
            $("#tempo-digitacao").text(tempoInicial);
            // aqui eu chamo a function resposável por fazer o tempo decrementar
            //, quando houver seleção no campo textarea.
            inicializaCronometro();
            //remove o css do textearea deixando o background padrão
            campo.removeClass("campo-desativado");
            campo.removeClass("borda-vermelha");
            campo.removeClass("borda-verde");
          }
principal.html
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="css/libs/materialize.min.css">
    <link rel="stylesheet" type="text/css" href="css/libs/google-fonts.css">
    <link rel="stylesheet" type="text/css" href="css/estilos.css">
    <title>Game Typer</title>
</head>
  <body>
     <div class="container">
          <h1 class="center">Game Typer</h1>
          <p class="frase center">esta frase tem cinco palavras</p>
            <ul class="informacoes center">
              <li>
              <i class="small material-icons icons">description</i>
              <span id="tamanho-frase">0</span> palavras
              </li>
              <li>
              <i class="small material-icons icons">query_builder</i>
              <span id="tempo-digitacao">2</span> segundos
              </li>
          </ul>
               <textarea class="campo-digitacao" rows="8" cols="40"></textarea>
                  <div class="botoes">
                        <a id="botao-reiniciar" class="btn-floating btn-large waves-effect waves-light red">
                                <i class="small material-icons">restore</i>
                            </a>
                  </div>
            <ul class="center">
                <li><span id="contador-caracteres">0</span> Caracteres</li>
                <li><span id="contador-palavras">0</span> Palavras</li>
            </ul>

         <section class="placar">
              <h3 class="center">Placar</h3>
                <table class="centered bordered">
                      <thead>
                            <tr>
                                  <th>Nome</th>
                                  <th>No. de palavras</th>
                                  <th>Remover</th>
                            </tr>
                      </thead>
                      <tbody>
                            <tr>
                                  <td>André</td>
                                  <td>99</td>
                                   <td>
                                   <a href="#" class="botao-remover">
                                     <i class="small material-icons">delete</i>
                                   </a>
                                   </td>
                            </tr>
                      </tbody>
                </table>
         </section>
         </div>

  <script type="text/javascript" src="js/jquery.js"></script>
  <script type="text/javascript" src="materialize.min.js"></script>
  <script type="text/javascript" src="js/main.js"></script>
  <script type="text/javascript" src="js/placar.js"></script>
  </body>
</html>
6 respostas

Oi André,

Quanto a remoção do usuário fixo no HTML, você não está conseguindo removê-lo pois o evento de click só é atribuído ao icones da lixeira dos usuário criados pelo próprio jogo.

Se você deseja conseguir remover os usuários fixos no HTML também, adicione esta linha:

$(".botao-remover").click(removeLinha);

No momento em que a página for carregada, ou seja, o seu código final deve ficar assim:

// inicializa todas as functions
$(function(){
    atualizaTamanhoFrase();
    inicializaContadores();
    inicializaCronometro();
    inicializaMarcadores();
    $("#botao-reiniciar").click(reiniciaJogo);
    $(".botao-remover").click(removeLinha);
});

Quanto ao seu segundo problema, de que no primeiro jogo o usuário é adicionado de modo duplicado, eu não consegui simular aqui com o seu código não.

Copiei e colei o seu código e quando eu testo, tudo acontece normalmente. Ao fim da primeira jogada os unícos usuários no placar são o André com 99 palavras , e o André Teixeira com o número de palavras digitadas nos primeiro jogo.

Quais são os usuários que ficam duplicados ai para você ?

então dei uma boa olhada no código e não resolvi, insere duas vezes o jogador que passei na variável

// função que insere o jogador na tabela com sues pontos conquistados
function inserePlacar(){
    var corpoTabela = $(".placar").find("tbody");
    var usuario = "André Vieira";
    var numPalavras = $("#contador-palavras").text();

    var linha = novaLinha(usuario,numPalavras);
    linha.find(".botao-remover").click(removeLinha);

    corpoTabela.prepend(linha);

    $(".placar").slideDown(600);

    scrollPlacar();
}

André,

tem como você subir o seu código no GitHub para dar uma olhada ? Ou zipar a sua pasta alura-typer e colocar em algum local que eu possa baixar ? Acho que preciso inspecionar ele todo para tentar encontrar o erro.

Está ai professor!! https://github.com/andrevieiraexbyte/Desenvolvimento/tree/master/JavaScript/jquery/game-typer

Oi André,

Baixei seu código aqui e ainda assim não consegui simular o erro de na primeira jogada os jogadores aparecerem duplicados.

O código que você está testando é este mesmo que você me mandou, sem nenhuma modificação ?

Será que é alguma diferença entre os navegadores ? Qual o seu navegador e o seu sistema operacional ?

Vou pedir para outros colegas testarem aqui também.

Exatamente esse código, aqui eu uso o mozilla e linux ubuntu 16 lts, no inspect ele gera duas TR com os valores, mas sempre só no primeiro que e adicionado ou quando atualiza a página!