7
respostas

Remoção não funciona

Estou com problemas para remover a linha da tabela e não sei onde está o erro. Clico em remover e não exclui nada.

var tempoInicial = $("#tempo").text();
var campo = $(".digitacao");

$(document).ready(function(){
    atualizaTamanhoFrase();
    inicializaContadores();
    inicializaCronometro();
    inicializaMarcadores();
    $("#reiniciar").click(reiniciarJogo);
});

function atualizaTamanhoFrase()
{
    var frase = $(".frase").text();
    var numPalavras = frase.split(" ").length;
    var tamFrase = $("#tamFrase");

    tamFrase.text(numPalavras);
}

function inicializaContadores()
{
    campo.on("input", function(){
        var conteudo = campo.val();

        var qtdPalavras = conteudo.split(/\S+/).length;
        $("#contadorPalavras").text(qtdPalavras);

        var qtdCaracters = conteudo.length;
        $("#contador").text(qtdCaracters);

    });
}

function inicializaCronometro()
{
    var tempoRestante = $("#tempo").text();

    campo.one("focus", function(){
        var cronometro = setInterval(function(){
            tempoRestante--;
            $("#tempo").text(tempoRestante);
            if(tempoRestante < 1)
            {
                clearInterval(cronometro);
                finalizaJogo();
            }
        }, 1000);
    });
}

function finalizaJogo()
{
    campo.toggleClass("campo-desativado");
    campo.attr("disabled", true);
    inserePlacar();

}

function inicializaMarcadores()
{
    var frase = $(".frase").text();
    campo.on("input", function() {
        var digitado = campo.val();
        var comparavel = frase.substr(0 , digitado.length);

        if(digitado == comparavel) {
            campo.addClass("borda-verde");
            campo.removeClass("borda-vermelha");
        } else {
            campo.addClass("borda-vermelha");
            campo.removeClass("borda-verde");
        }
    });
}

function inserePlacar()
{
    var corpo = $(".placar").find("tbody");
    console.log(corpo);
    var usuario = "Diego";
    var numPalavras = $("#contadorPalavras").text();
    var botaoRemover = "<a href='#'><i class='small material-icons'>delete</i></a>";

    var linha = "<tr>"+
                    "<td>"+usuario+"</td>"+
                    "<td>"+numPalavras+"</td>"+
                    "<td>"+botaoRemover+"</td>"+
                "</tr>";

    corpo.append(linha);

    $(".deleta").click(event, function(){
        event.preventDefault();
        $(this).parent().parent().remove();
    });
}


function reiniciarJogo()
{
        campo.attr("disabled", false);
        campo.val("");
        $("#contadorPalavras").text("0");
        $("#contador").text("0");
        $("#tempo").text(tempoInicial);
        inicializaCronometro();
        campo.toggleClass("campo-desativado");
        campo.removeClass("borda-verde");
        campo.removeClass("borda-vermelha");
}


7 respostas

Olá Grasiela, tudo bem com você?

Então no seu caso a remoção não está funcionando porque ela está presente dentro da função inserePlacar(), e não há como acessar o botão nesse momento.

Para corrigir isso basta tirar o código:

    $(".deleta").click(event, function(){
        event.preventDefault();
        $(this).parent().parent().remove();
    });

da função e irá funcionar corretamente :)

Dessa maneira a qualquer momento que o botão for clicado ele irá conseguir fazer a remoção.

Abraços e Bons Estudos!

Fiz as alterações e ainda não funciona.

??????????

Olá Grasiela, tudo bem?

Poderia postar aqui o código do seu HTML também para poder analisar? Como suas classes no html estão um pouco diferentes iria auxiliar a encontrar algum erro :)

Bons Estudos!

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="css/libs/materialize.min.css">
    <link rel="stylesheet" href="css/libs/google-fonts.css">
    <link rel="stylesheet" href="css/estilos.css">
    <title>Alura Typer</title>
</head>
<body>
    <div class="container">
        <h1 class="center">Alura Typer</h1>
        <p class="frase center">Lorem ipsum dolor sit amet consectetur adipisicing elit.</p >

        <ul class="info center">
            <li>
                <i class="small material-icons icones">description</i>
                <span id="tamFrase">30</span> palavras
            </li>
            <li>
                <i class="small material-icons icones">query_builder</i>
                <span id="tempo">10</span> segundos
            </li>
        </ul>

        <textarea cols="40" rows="8" class="digitacao center"></textarea>

        <div class="botoes">
            <a id="reiniciar" class="btn-floating btn-large waves-effect waves-light red">
                <i class="material-icons">restore</i>
            </a>
        </div>

        <ul class="center">
            <li><span id="contador">0</span> caracters</li>
            <li><span id="contadorPalavras">0</span> palavras</li>
        </ul>

        <section class="placar">
            <h3 class="center">Placar</h3>
            <table class="centered bordered">
                <thead>
                    <tr>
                        <th>Nome</th>
                        <th>Nº de palavras</th>
                    </tr>
                </thead>
                <tbody>
                    <a href="#" class="deleta"></a>                    
                </tbody>
                </table>
        </section>

        <!--<button id="reiniciar" class="right">Reiniciar Jogo</button>-->
    </div>

    <script src="js/jquery.js"></script>
    <script src="js/main.js"></script>
</body>
</html>

Olá Grasiela, dei uma olhada no seu html e encontrei alguns "erros" que precisam ser corrigidos para que o projeto funcione normalmente:

  • Precisamos adicionar esses campos na tabela do seu html:
              <tr>
                  <td>Teste</td>
                  <td>10</td>
                  <td>
                      <a href="#" class="deleta">
                          <i class="small material-icons">delete</i>
                      </a>
                  </td>
              </tr>

Veja que a nossa função deleta tem a seguinte configuração: $(this).parent().parent().remove();

Ou seja quando clicamos no botão para excluir estamos no elemento <a>do html e subimos um parente e vamos para o elemento <td> e depois subimos mais um para chegar no <tr> para após isso executar o remove().

O fato de você não ter adicionado o td e o tr faz com que ele suba dois elemento que já não faz mais parte das informações da tabela, entendeu?

E quando estamos criando um html é necessário sempre definir bem nossas tags e o td (table-data) informa que aquele dado se trata de uma informação de uma tabela e o tr (table-row) diz que se trata de uma linha de uma tabela, então não é bom deixar de fora de nosso html.

Com essas mudanças em seu html e com a mudança que eu sugeri anteriormente em seu main.js o seu programa irá funcionar direitinho :)

Veja que nesse primeiro momento é possível deletar apenas a primeira linha da tabela e na próxima aula já é abordado como fazer isso para todas as linhas com o Jquery!

Bons Estudos!

Fiz as alterações e ainda não resolveu. Abaixo está o link do projeto se quiser dar uma olhada:

https://github.com/GrasielaMach14/alura-typer.

Olá Grasiela,

Eu fiz o download do seu projeto no github e está funcionando normalmente, veja que o botão de remover deve apenas remover o "David", que é o primeiro usuário de nossa tabela

Aqui os prints de teste que testei com seu código sem modificar nada:

Os próximos usuários inseridos após jogar algumas rodadas ainda não é para funcionar a remoção, apenas na próxima aula do curso será ensinado a forma correta :)

Você pode estar testando em algum outro navegador para ver se não foi algum erro de compatibilidade, ou assistir a próxima aula do curso pois grande parte do código será refatorado e acredito que você não terá problemas!

Qualquer coisa estou a disposição

Abraços!

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