RESOLVIDO: Como recuperar texto do BD com quebra de linha num "textarea" do Bootstrap?

7 respostas Resolvido
bootstrapnodejsmysqljavascript
fabio.argenton

Fala pessoal, estou precisando de uma ajudinha aqui com meu textarea do bootstrap.

Tenho um formulário com o textarea, que está tudo funcionando perfeitamente (CRUD), os dados são salvos e recuperados de uma tabela do MySQL, tudo ok.

Porém ao incluir um texto que por ventura possua quebra de linha ele salva no BD normalmente mas quando entro na opção editar do formulário, ou seja, clico na tabela e uma função popula todos os campos do formulário, minha aplicação não consegue popular o textarea devido ao texto ter quebra de linha no BD, se o texto for contínuo, ok, popula normalmente mas se tiver com quebra de linha não popula, ex.:

Este texto possui essa primeira linha aqui.
E possui esta segunda linha aqui.

E pode ocorrer de ter uma terceira linha aqui, pois poderá ser um texto copiado de um e-mail por exemplo.

Por favor, se alguém tiver um solução, minha aplicação é WEB desenvolvida em NodeJS, Javascript e uso o layout AdminLTE3 com Bootstrap.

Informações adicionais:
Meu campo na tabela referente a este textarea é do tipo varchar (já tentei mudar para TEXT), aqui como esta o texto no BD:
image

Aqui está o trecho do código que popula meu elemento:
document.getElementById('observacao_operacao_EDIT').value = '<%= row.observacao_operacao %>';

Aqui está meu elemento textarea que deveria ser populado:

7 Respostas

Lucas_Camara

Ao depurar o código, qual valor vem em: row.observacao_operacao ? Veja se está vindo \n para as quebras de linha.

fabio.argenton

Lucas, veja que a informação está vindo conforme esta no BD com quebra de linha, porém não popula os campos, eu até coloquei um alert('<%= row.observacao_operacao %>') ali já no inicio pra ver, e quando o texto está com quebra o alert não chega nem ser disparado, se o texto for continuo ai tudo rola direitinho:

To achando que o problema não é nem no textarea, o problema está no <%= row.observacao_operacao %>, engraçado que pra popular a tabela está normal mas se usar ele dentro ai da função do botão editar e se tiver quebra de linha da erro, o alert nem dispara.

Lucas_Camara

O probema é que fazer o alert dessa forma, vai causar erro de sintaxe quando ele for executado. E acredito que algo semelhante esteja causando o mesmo problema ao setar o value do textarea no JS.

Deve está ligado ao uso desse tipo de expressão: <%= row.observacao_operacao %>, pois isso vai transformar o texto vindo na variável como um conteúdo da página e soh depois o JS será executado.

Lucas_Camara

Vc conseguiria usar a expressão <%= row.observacao_operacao %> diretamente no textarea assim?

<textarea id="observacao_operacao_EDIT">
    <%= row.observacao_operacao %>
</textarea>
fabio.argenton

Sim, se eu colocar diretamente no textarea carrega perfeitamente (acabei de testar aqui).

O problema é que meu formulário fica num modal e este modal abre quando eu clico numa linha da minha tabela executando assim aquela função onClick que carrega os campos da linha clicada (este botão está dentro de um forEach que carrega o array na tabela), mas estranho cara que funciona tudo certinho e só da erro quando o texto tem quebra de linha, será que tem alguma alternativa sem alterar tudo? tenho mais 8 telas desta forma, estou procurando aqui mas até agora não encontrei nada.

Lucas_Camara
Solucao aceita

Como eu disse, o problema é que causa erro de sintaxe no JS quando há quebra de linha (vc pode ver na imagem que vc mandou).

Faz um teste (bem tosco, mas eh uma tentativa):

document.getElementById('observacao_operacao_EDIT').value = new String(`<%= row.observacao_operacao %>`).replace(/\n/g, '\n');

Ou melhor:

document.getElementById('observacao_operacao_EDIT').value = `<%= row.observacao_operacao %>`;
fabio.argenton

Lucas… vc é fera mesmo cara, muito obrigado, deu certo! show de bola, obrigado mesmo.

Criado 29 de junho de 2020
Ultima resposta 29 de jun. de 2020
Respostas 7
Participantes 2