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

Botão não executa a função ao clicar!

Olá,

Estou praticando meus conhecimentos de Front End criando minha própria TODOLIST. Mas, estou com um problema que está me fazendo passar raiva há dias e até agora não parece fazer sentido.

Imagem da tela principal do TODOLIST para ver se a explicação faz mais sentido: https://imgur.com/a/rPTDTYT

Como é possível ver na imagem linkada acima, existe um container que possui as informações da task, nele há 3 botões: No lado esquerdo há um quadrado vazio com bordas que serve como um check button para marcar a task como concluída e no lado direito dois botões para marcar a task como importante e o outro para excluir.

O código para desenhar essas tasks é o seguinte:

https://gist.github.com/DarlanSilv4/cd1fbc879704aee45d5e2aa0762fe537

Até aqui nenhum problema, a questão é na hora de programar os botões. Como pode ver no código acima, os botões são criados em uma função externa e depois adicionados ao seus respectivos elementos pais usando o appendChild e a função que o os constrói como parâmetro.

Os botões important e o delete funcionam normalmente. Para simplificar vou mandar o código somente do important:

https://gist.github.com/DarlanSilv4/b44ec3e467c9d1a0a6820aca48d88874

Para construir o botão ele recebe a ID da task, verifica se ela é importante, define seu estado, adiciona um listener para alterar o estado ao clicar. 100% Funcional, óbvio que ainda não atualiza a tela automaticamente, mas esse não é o problema.

O problema é na hora de criar o botão de concluir tasks, sim, aquele quadrado vazio. A função dele é basicamente a mesma do important e funciona da mesma forma:

https://gist.github.com/DarlanSilv4/13cadbdc7f8b4d6eb90e20b1270705d7

Teoricamente deveria funcionar, afinal a lógica entre os botões é a mesma, mas aparentemente esse não é o caso. O botão é desenhado na tela com sucesso mas ao clica no botão NADA ACONTECE, eu atualizo, olho o local storage e nada, a task continua com o valor concluded como o padrão (false).

Desde já agradeço quem tiver a paciência de me ajudar haha.

3 respostas

Fala ai Darlan, tudo bem? Olhando assim é bem complicado dizer o que pode estar causando esse comportamento.

Sendo assim, posso te pedir um favor? Compartilha o projeto completo comigo, assim eu consigo simular o problema por aqui e analisá-lo com mais calma.

Pode compartilhar através do Github ou Google Drive (zipado).

Fico no aguardo.

Imaginei haha. Aqui está o link do projeto, coloquei no drive mesmo, não queria mandar pro Github código quebrado mas como são poucos kb não vai te dar trabalho: https://drive.google.com/file/d/1UnR8-haZ0oSwko6BSjYnMtJKsVu41_X1/view?usp=sharing

solução!

Fala Darlan, dei uma olhada no projeto, o problema está nesse trecho:

task.appendChild(concludeButton(id));
task.innerHTML += info;

Repare que você está adicionando o botão para o task e depois faz um innerHTML, o ideal seria fazer através de appendChild também ou deixar o innerHTML antes de adicionar os botões.

Com essa modificação o botão de concluir deve ser invocado.

Espero ter ajudado.

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