Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida - Edição das tarefas

Pessoal fiz a parte de edição de tarefas diferente do que foi apresentado na aula, pois queria incluir a edição diretamente no campo de parágrafo ao invés de utilizar um prompt. Porém queria adicionar uma funcionalidade de impedir que o usuário saia do campo de edição antes de salvar as alterações. Conseguem me ajudar?

Segue o código :


function criarElementoTarefa (tarefa){
    const li = document.createElement('li');
    li.classList.add('app__section-task-list-item');

    const svg = document.createElement('svg');
    svg.innerHTML = `
    <svg class="app__section-task-icon-status" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
        <circle cx="12" cy="12" r="12" fill="#FFF"></circle>
        <path d="M9 16.1719L19.5938 5.57812L21 6.98438L9 18.9844L3.42188 13.4062L4.82812 12L9 16.1719Z" fill="#01080E"></path>
    </svg>
`;

    const paragrafo = document.createElement('p');
    paragrafo.textContent = tarefa.descricao;
    paragrafo.classList.add('app__section-task-list-item-description');

    const botao = document.createElement('button');
    botao.classList.add('app_button-edit');

    function salvarOuEditar() {
        
        const textoAnterior = tarefa.descricao; // Salva o texto anterior

        if (edicaoAtiva) {
            // Salvar mudanças
            const novaDescricao = paragrafo.textContent.trim();
            if (novaDescricao !== ''){
                paragrafo.contentEditable = false;
                paragrafo.textContent = novaDescricao;
                tarefa.descricao = novaDescricao;
                atualizarTarefas();
            }else{
                paragrafo.textContent = textoAnterior;
                alert('Digite algo');
                edicaoAtiva = !edicaoAtiva;
            }
            
        } else {
            // Permitir edição
            paragrafo.contentEditable = true;
            paragrafo.focus();
        }
    
        edicaoAtiva = !edicaoAtiva;
        console.log(edicaoAtiva);
    }
    botao.onclick = salvarOuEditar;

    paragrafo.addEventListener('keydown', (event) => {// opção para utilizar o enter para salvar
    if (event.key === 'Enter') {
        event.preventDefault();
        salvarOuEditar();
        }
    });


    const imagemBotao = document.createElement('img');

    imagemBotao.setAttribute('src','/imagens/edit.png');
    botao.append(imagemBotao);//colocando a imagem dentro do botão

    li.append(svg);
    li.append(paragrafo);
    li.append(botao);

    return li;
}
1 resposta
solução!

Olá Bruno! Tudo ok contigo?

Uma maneira de fazer isso seria adicionar um evento de "blur" ao parágrafo, que é disparado quando o elemento perde o foco.

Entretanto, você pode cancelar esse evento se a edição estiver ativa. Para isso, você pode adicionar o seguinte código no seu método criarElementoTarefa:

paragrafo.addEventListener('blur', function(event) {
    if (edicaoAtiva) {
        event.preventDefault();
        // Aqui você pode adicionar uma mensagem indicando que o usuário precisa salvar as alterações antes de sair do campo de edição
    }
});

Essa função vai verificar se a edição está ativa quando o usuário tentar sair do campo de edição. Se estiver, o evento blur será cancelado, impedindo que o campo de edição perca o foco. E você pode adicionar mais condicionais para personalizar melhor a função e deixar ela com a ideia que você quer.

E lembre-se de que essa é apenas uma sugestão e pode não funcionar perfeitamente para todos os casos, pois a maneira como os navegadores lidam com o evento blur pode variar.

Era isso, se precisar conte com o fórum!

Abraços e bons estudos!