val () vs. text () para textarea

106

Estou usando jQuery e me perguntando se devo usar val () ou text () (ou outro método) para ler e atualizar o conteúdo de uma textarea.

Eu tentei ambos e tive problemas com ambos. Quando eu uso text () para atualizar textarea, as quebras de linha (\ n) não funcionam. Quando eu uso val () para recuperar o conteúdo textarea, o texto fica truncado se for muito longo.

Christophe
fonte
o que significa que as quebras de linha não funcionam?
kaz
@kaz: o texto permanece na mesma linha.
Christophe
E o que você quer dizer com "texto fica truncado" - na saída de depuração do console? No próprio valor de retorno? Seria mais fácil se você fornecesse um jsfiddle ...
Constantin Groß
@Connum: no valor de retorno. Tentando jsfiddle agora ...
Christophe
1
Cheguei aqui pesquisando no Google por texto textarea truncado. Resolvi meu problema adicionando alguns \ n \ n ao final do .val (). Estranho, mas funcionou.
Darin

Respostas:

148

A melhor maneira de set / get o valor de uma textarea é a .val(), .valuemétodo.

.text()usa internamente o .textContent(ou.innerText método para o IE) para obter o conteúdo de a <textarea>. Os seguintes casos de teste ilustram como text()e se .val()relacionam entre si:

var t = '<textarea>';
console.log($(t).text('test').val());             // Prints test
console.log($(t).val('too').text('test').val());  // Prints too
console.log($(t).val('too').text());              // Prints nothing
console.log($(t).text('test').val('too').val());  // Prints too

console.log($(t).text('test').val('too').text()); // Prints test

A value propriedade , usada por .val()sempre mostra o valor visível atual, enquanto text()o valor de retorno de pode estar errado.

Rob W
fonte
obrigado, tentando isso agora. No momento, não consigo reproduzir o problema que tive com val () e truncamento. Talvez eu peguei o suspeito errado ...
Christophe
5
Muito obrigado pelos exemplos. Aparentemente, esse era o meu problema, escrevi com text () e li com val ().
Christophe
Alterar o valor de uma textarea usando text()NÃO funciona mais após alterar manualmente qualquer coisa nela (por exemplo, adicionar um caractere)
janeiro
12

.val()sempre trabalha com textareaelementos.

.text()funciona às vezes e falha outras vezes! Não é confiável (testado no Chrome 33)

O melhor é que .val()funcione perfeitamente com outros elementos do formulário também (como input), enquanto .text()falha.

Kshitij Saxena -KJ-
fonte