Por favor, considere mudar a sua pergunta e remover a palavra "jQuery"
vsync
Respostas:
113
Eu tentei muitos e
este é ótimo. Link está morto. A versão mais recente está disponível aqui . Veja abaixo a versão antiga. Você pode tentar pressionar e segurar a tecla Enter na área de texto. Compare o efeito com o outro plug-in de expansão automática de área de texto ....
se o meu id caixa de texto é txtMeetingAgenda então como posso implementar Auto textArea propriedade em jquery
Piyush
aqui clique evento é definir ou não
Piyush
trata-se de área de texto, mas e quanto a textbox.is esse plugin também funciona para caixa de texto?
Piyush
1
esse plug-in não funciona bem, tente
redimensionar automaticamente
Funciona bem apenas de uma maneira quando a área de texto está crescendo. Mas quando você começa a excluir o texto, isso não reduz automaticamente a altura.
Ekashking
166
Se você não quer um plugin, existe uma solução muito simples
Eu tive que remover + parseFloat ($ (this) .css ("borderTopWidth")) + parseFloat ($ (this) .css ("borderBottomWidth")), caso contrário, ele executa loops infinitamente com uma área de texto estilizada com bootstrap
@metakungfu Bem, em vez de apenas votar, talvez você possa ajudar a melhorar a resposta. Eu não tenho nenhuma maneira de testar o atm da Apple e o safari para Windows foi descontinuado há muito tempo. Então, eu realmente não posso fazer nada para determinar por que não funcionaria. Em termos de código, não há nada errado com esta solução. Você tem certeza de que é o código que está quebrando e não o safari que quebra no jsfiddle? o safari é bastante exigente e o violino passou por uma grande atualização. Mayeb você pode abrir dev con e fornecer mais alguns detalhes?
SpYk3HH 21/07
1
também precisa textarea conjunto overflow-y para oculto para evitar piscar de rolagem
iulial
2
Se eu quiser remover as linhas adicionadas, o tamanho ampliado da caixa de texto permanecerá o mesmo. É possível que ele também possa ser redimensionado automaticamente novamente?
Steven
33
Aumenta / diminui a área de texto. Esta demonstração utiliza jQuery para ligação de eventos, mas não é uma obrigação de forma alguma. ( sem suporte do IE - o IE não responde à alteração do atributo de linhas )
porque o código deve esperar um pouco para a letra digitada a ser impresso no interior do textarea e por isso a mudança dimensões do textarea
vsync
1
Entendo, a solução está quebrada quando o texto é copiado (CTRL + V) de qualquer fonte. Embora, se o texto for digitado manualmente - isso é incrível e muito suave.
Satya Kalluri 27/08/14
1
@ vsync: como você modificaria para várias áreas de texto? Ou seja, você tem textarea1 e textarea2 e deseja permitir que ambos cresçam?
se você deseja obter o scrollHeight de $ (this), você pode usar $ (this) .prop ('scrollHeight'); Em vez disso;)
Samuel Vicent
3
pisca a cada quebra de linha
joe
11
Graças ao SpYk3HH, comecei com a solução dele e a transformei nessa solução, que adiciona a funcionalidade de redução e é ainda mais simples e rápida, presumo.
não funciona nada bem: / todo caractere digitado, adiciona altura.
vsync 16/10
1
Funciona perfeito para mim! Definitivamente, não há nada no código simples para fazer o que você diz que faz.
Drolex 26/10/2013
1
Sim, eu vejo agora, seu código deve ter a linha que define a altura para 30 inicialmente. esta é provavelmente uma ilne necessária-un, porque obriga o desenvolvedor para ajustar o código, em vez do código de compreender e adaptar-se ao textarea,
vsync
1
Isso está incorreto. O desenvolvedor não precisa ajustar o código. É necessário definir a altura para 30 e funciona para tudo. O usuário nunca vê isso acontecer. É assim que é possível reduzir a área de texto. O código entende e se adapta à área de texto. Esse é ponto principal.
Drolex
Você está certo. página de demonstração: jsbin.com/ObEcoza/2/edit (definir a altura para 1pxparecer melhor)
vsync
10
Para definir uma área de texto expansível automaticamente, é necessário fazer duas coisas:
Expanda -o quando você clicar na tecla Enter dentro dele ou digite o conteúdo mais de uma linha.
E reduza -o em desfoque para obter o tamanho real se o usuário tiver inserido espaços em branco. ( Bônus )
Aqui está uma função artesanal para realizar a tarefa.
Funcionando bem com quase todos os navegadores (<IE7) . Aqui está o método:
//Here is an event to get TextArea expand when you press Enter Key in it.// intiate a keypress event
$('textarea').keypress(function(e){if(e.which ==13){var control = e.target;var controlHeight = $(control).height();//add some height to existing height of control, I chose 17 as my line-height was 17 for the control
$(control).height(controlHeight+17);}});
$('textarea').blur(function(e){var textLines = $(this).val().trim().split(/\r*\n/).length;
$(this).val($(this).val().trim()).height(textLines*17);});
Uma caixa de texto (elemento de texto de entrada que eu presumo) não é multilinha. Use uma área de texto, mas estilize-a adequadamente - linhas, colunas, etc. e, em seguida, use o plug-in de crescimento automático como acima.
richsage
4
Todos devem experimentar este plugin jQuery: xautoresize-jquery . É muito bom e deve resolver seu problema.
Este me deu os melhores resultados e também é fácil de implementar.
Blitzkid
4
function autosize(textarea){
$(textarea).height(1);// temporarily shrink textarea so that scrollHeight returns content height when content does not fill textarea
$(textarea).height($(textarea).prop("scrollHeight"));}
$(document).ready(function(){
$(document).on("input","textarea",function(){
autosize(this);});
$("textarea").each(function(){
autosize(this);});});
(Isso não funcionará no Internet Explorer 9 ou anterior, pois utiliza o inputevento)
no meu projeto, como eu estou tornando as coisas inteiras na página, Jquery e datilografado, sua solução era a única maneira que eu poderia resolver o meu problema graças
Harry Sarshogh
3
Acabei de criar essa função para expandir as áreas de texto no carregamento de página. Apenas mude eachpara keyupe ocorrerá quando a área de texto for digitada.
// On page-load, auto-expand textareas to be tall enough to contain initial content
$('textarea').each(function(){var pad = parseInt($(this).css('padding-top'));if($.browser.mozilla)
$(this).height(1);var contentHeight =this.scrollHeight;if(!$.browser.mozilla)
contentHeight -= pad *2;if(contentHeight > $(this).height())
$(this).height(contentHeight);});
Testado no Chrome, IE9 e Firefox. Infelizmente, o Firefox possui esse bug que retorna o valor incorreto para scrollHeight, portanto, o código acima contém uma solução alternativa (hacky) para ele.
Corrigi alguns bugs na resposta fornecida por Reigel (a resposta aceita):
A ordem na qual as entidades html são substituídas agora não causa código inesperado no elemento shadow. (O original substituiu ">" por "& ampgt;", causando cálculo incorreto da altura em alguns casos raros).
Se o texto terminar com uma nova linha, a sombra agora terá um caractere extra "#", em vez de ter uma altura adicionada fixa, como é o caso no original.
O redimensionamento da área de texto após a inicialização atualiza a largura da sombra.
quebra de linha adicionada: quebra de palavra para sombra, por isso quebra o mesmo que uma área de texto (forçando quebras por palavras muito longas)
Ainda existem alguns problemas relacionados a espaços. Não vejo uma solução para espaços duplos, eles são exibidos como espaços únicos na sombra (renderização em html). Isso não pode ser resolvido usando o & nbsp ;, porque os espaços devem se romper. Além disso, a área de texto quebra uma linha após um espaço, se não houver espaço para esse espaço, ela quebrará a linha em um ponto anterior. Sugestões são bem vindas.
Código de SpYk3HH com adição para diminuir o tamanho.
function get_height(elt){return elt.scrollHeight + parseFloat($(elt).css("borderTopWidth"))+ parseFloat($(elt).css("borderBottomWidth"));}
$("textarea").keyup(function(e){var found =0;while(!found){
$(this).height($(this).height()-10);while($(this).outerHeight()< get_height(this)){
$(this).height($(this).height()+1);
found =1;};}});
Para quem estiver usando o plug-in postado por Reigel, lembre-se de que isso desabilitará a funcionalidade de desfazer no Internet Explorer (experimente a demonstração).
Eu queria animações e encolher automaticamente. A combinação é aparentemente difícil, porque as pessoas criaram soluções bastante intensas para isso. Também a fiz à prova de múltiplas texturas. E não é tão ridiculamente pesado quanto o plugin jQuery.
Baseei-me na resposta do vsync (e na melhoria que ele fez para isso), http://codepen.io/anon/pen/vlIwj é o codepen da minha melhoria.
Nota: notei que às vezes funciona melhor com o tamanho da caixa: caixa de conteúdo. Eu não sou inteiramente certo porque, porém, ele deve processar o preenchimento corretamente :(
Lodewijk
1
Há muitas respostas para isso, mas achei algo muito simples, anexe um evento de keyup à área de texto e verifique se a tecla Enter é pressionada, o código da tecla é 13
Pergunta antiga, mas você poderia fazer algo assim:
html:
<textareaclass="text-area"rows="1"></textarea>
jquery:
var baseH;// base scroll height
$('body').one('focus.textarea','.text-area',function(e){
baseH =this.scrollHeight;}).on('input.textarea','.text-area',function(e){if(baseH <this.scrollHeight){
$(this).height(0).height(this.scrollHeight);}else{
$(this).height(0).height(baseH);}});
Dessa forma, o redimensionamento automático será aplicado a qualquer área de texto com a classe "área de texto". Também diminui quando o texto é removido.
Respostas:
Eu tentei muitos e este é ótimo.Link está morto. A versão mais recente está disponível aqui . Veja abaixo a versão antiga.Você pode tentar pressionar e segurar a tecla Enter na área de texto. Compare o efeito com o outro plug-in de expansão automática de área de texto ....
editar com base no comentário
nota: você deve incluir os arquivos js necessários ...
Para evitar que a barra de rolagem na textarea de piscar e desligar durante a expansão / contração, você pode definir o
overflow
quehidden
bem:Atualizar:
O link acima está quebrado. Mas você ainda pode obter os arquivos javascript aqui .
fonte
Se você não quer um plugin, existe uma solução muito simples
Veja-o trabalhando em um jsFiddle que eu costumava responder a outra pergunta da área de texto aqui .
Para responder à pergunta de fazer isso ao contrário ou diminuí-lo à medida que o texto é removido: jsFiddle
@Jason projetou um aqui
fonte
if (this.clientHeight < this.scrollHeight) { this.style.height = this.scrollHeight + 'px'; }
Aumenta / diminui a área de texto. Esta demonstração utiliza jQuery para ligação de eventos, mas não é uma obrigação de forma alguma.
( sem suporte do IE - o IE não responde à alteração do atributo de linhas )
PÁGINA DE DEMONSTRAÇÃO
HTML
CSS
javascript (atualizado)
fonte
fonte
Você pode tentar este
fonte
Graças ao SpYk3HH, comecei com a solução dele e a transformei nessa solução, que adiciona a funcionalidade de redução e é ainda mais simples e rápida, presumo.
Testado no navegador atual Chrome, Firefox e Android 2.3.3.
Você pode ver os flashes das barras de rolagem em alguns navegadores. Adicione este CSS para resolver isso.
fonte
1px
parecer melhor)Para definir uma área de texto expansível automaticamente, é necessário fazer duas coisas:
Aqui está uma função artesanal para realizar a tarefa.
Funcionando bem com quase todos os navegadores (<IE7) . Aqui está o método:
AQUI é um post sobre isso.
fonte
Eu usei o plugin jQuery do Textarea Expander antes com bons resultados.
fonte
Todos devem experimentar este plugin jQuery: xautoresize-jquery . É muito bom e deve resolver seu problema.
fonte
(Isso não funcionará no Internet Explorer 9 ou anterior, pois utiliza o
input
evento)fonte
Acabei de criar essa função para expandir as áreas de texto no carregamento de página. Apenas mude
each
parakeyup
e ocorrerá quando a área de texto for digitada.Testado no Chrome, IE9 e Firefox. Infelizmente, o Firefox possui esse bug que retorna o valor incorreto para
scrollHeight
, portanto, o código acima contém uma solução alternativa (hacky) para ele.fonte
Corrigi alguns bugs na resposta fornecida por Reigel (a resposta aceita):
Ainda existem alguns problemas relacionados a espaços. Não vejo uma solução para espaços duplos, eles são exibidos como espaços únicos na sombra (renderização em html). Isso não pode ser resolvido usando o & nbsp ;, porque os espaços devem se romper. Além disso, a área de texto quebra uma linha após um espaço, se não houver espaço para esse espaço, ela quebrará a linha em um ponto anterior. Sugestões são bem vindas.
Código corrigido:
fonte
Código de SpYk3HH com adição para diminuir o tamanho.
fonte
Isso funcionou para mim melhor:
fonte
As pessoas parecem ter muito mais soluções trabalhadas ...
É assim que eu faço:
Isso funcionará com linhas longas, além de quebras de linha. Cresce e diminui.
fonte
Eu escrevi essa função jquery que parece funcionar.
Você precisa especificar min-height em css e, a menos que queira codificar, ele precisa ter dois dígitos. ou seja, 12px;
fonte
Para quem estiver usando o plug-in postado por Reigel, lembre-se de que isso desabilitará a funcionalidade de desfazer no Internet Explorer (experimente a demonstração).
Se esse é um problema para você, sugiro usar o plugin postado por @richsage, pois ele não sofre com esse problema. Consulte o segundo marcador em Pesquisando a área de texto final de redimensionamento para obter mais informações.
fonte
Há também um
bgrins/ExpandingTextareas (github)
projeto muito legal , baseado em uma publicação de Neill Jenkins chamada Expanding Text Areas Made Elegantfonte
Eu queria animações e encolher automaticamente. A combinação é aparentemente difícil, porque as pessoas criaram soluções bastante intensas para isso. Também a fiz à prova de múltiplas texturas. E não é tão ridiculamente pesado quanto o plugin jQuery.
Baseei-me na resposta do vsync (e na melhoria que ele fez para isso), http://codepen.io/anon/pen/vlIwj é o codepen da minha melhoria.
HTML
CSS
JS
fonte
Há muitas respostas para isso, mas achei algo muito simples, anexe um evento de keyup à área de texto e verifique se a tecla Enter é pressionada, o código da tecla é 13
keyPressHandler(e){
if(e.keyCode == 13){
e.target.rows = e.target.rows + 1;
}
}
Isso adicionará outra linha à sua área de texto e você poderá estilizar a largura usando CSS.
fonte
Digamos que você esteja tentando fazer isso usando o Knockout ... veja como:
Na página:
No modelo de exibição:
Isso deve funcionar mesmo se você tiver várias áreas de texto criadas por um forock de Knockout, como eu.
fonte
Solução Simples:
HTML:
JS:
https://fiddle.jshell.net/7wsnwbzg/
fonte
A solução mais simples:
html:
css:
js (jquery):
fonte
Solução com JS puro
https://jsfiddle.net/Samb102/cjqa2kf4/54/
fonte
Esta é a solução que acabei usando. Eu queria uma solução em linha, e isso até agora parece funcionar muito bem:
fonte
https://codepen.io/nanachi1/pen/rNNKrzQ
isso deve funcionar.
fonte
@Georgiy Ivankin fez uma sugestão em um comentário, usei-a com sucesso :) -, mas com pequenas alterações:
Ele para de se expandir após atingir a altura máxima de 200px
fonte
Pergunta antiga, mas você poderia fazer algo assim:
html:
jquery:
Dessa forma, o redimensionamento automático será aplicado a qualquer área de texto com a classe "área de texto". Também diminui quando o texto é removido.
jsfiddle:
https://jsfiddle.net/rotaercz/46rhcqyn/
fonte
Tente o seguinte:
fonte
Solução jQuery simples:
HTML:
O estouro deve estar oculto . Redimensionar é nenhum se você não deseja redimensioná-lo com o mouse.
fonte