Eu gostaria de ter alguma funcionalidade pela qual, se eu escrever
<textarea maxlength="50"></textarea>
<textarea maxlength="150"></textarea>
<textarea maxlength="250"></textarea>
ele irá impor automaticamente o maxlength no textArea. Se possível, não forneça a solução em jQuery.
Observação: isso pode ser feito se eu fizer algo assim:
<textarea onkeypress="return imposeMaxLength(event, this, 110);" rows="4" cols="50">
function imposeMaxLength(Event, Object, MaxLen)
{
return (Object.value.length <= MaxLen)||(Event.keyCode == 8 ||Event.keyCode==46||(Event.keyCode>=35&&Event.keyCode<=40))
}
Copiado de Qual é a melhor maneira de emular um atributo “maxlength” de entrada HTML em uma área de texto HTML?
Mas a questão é que não quero escrever onKeyPress e onKeyUp toda vez que declaro uma textArea.
javascript
html
textarea
Rakesh Juyal
fonte
fonte
Respostas:
fonte
onblur
não manipulará a colagem até que o usuário clique para sair da área de texto.onkeyup
não irá lidar com a colagem se for feito por meio de um menu de contexto ou um menu do navegador. Essa abordagem funciona se você não precisar filtrar para colar. Veja esta resposta para uma abordagem baseada em cronômetro stackoverflow.com/a/10390626/1026459Eu sei que você quer evitar jQuery, mas como a solução requer JavaScript, esta solução (usando jQuery 1.4) é a mais consistente e robusta.
Inspirado, mas uma melhoria em relação à resposta de Dana Woodman:
As mudanças dessa resposta são: simplificadas e mais genéricas, usando jQuery.live e também não definindo val se o comprimento estiver OK (leva a teclas de seta funcionais no IE e aumento perceptível no IE):
EDIT: versão atualizada para jQuery 1.7+ , usando em
on
vez delive
fonte
Atualizar Use a solução de Eirik usando
.live()
, pois é um pouco mais robusta.Mesmo que você quisesse uma solução que não usasse jQuery, pensei em adicionar uma para qualquer pessoa que encontrasse esta página por meio do Google e estivesse procurando uma solução jQuery:
Espero que isso seja útil para vocês, Googlers ...
fonte
HTML5 adiciona um
maxlength
atributo aotextarea
elemento, assim:Atualmente, isso é compatível com o Chrome 13, FF 5 e Safari 5. Não é de surpreender que isso não seja compatível com o IE 9. (Testado no Win 7)
fonte
Essa solução evita o problema no IE, onde o último caractere é removido quando um caractere no meio do texto é adicionado. Também funciona bem com outros navegadores.
Minha validação de formulário lida com quaisquer problemas em que o usuário possa ter colado (apenas parece ser um problema no IE) texto excedendo o comprimento máximo da textarea.
fonte
Este é um código ajustado que acabei de usar no meu site. Foi aprimorado para exibir o número de caracteres restantes para o usuário.
(Desculpe novamente para OP que não solicitou jQuery. Mas, falando sério, quem não usa jQuery atualmente?)
NÃO foi testado com caracteres internacionais de bytes múltiplos, então não tenho certeza de como funciona exatamente com eles.
fonte
Também adicione o seguinte evento para lidar com a colagem na textarea:
fonte
do atributo HTML maxlength w3schools.com
Para o IE8 ou versões anteriores, você deve usar o seguinte
PS
do atributo HTML maxlength w3schools.com
fonte
Melhor solução em comparação com o corte do valor da textarea.
fonte
Você pode usar jQuery para torná-lo fácil e claro
JSFiddle DEMO
É testado em
Firefox
,Google Chrome
eOpera
fonte
text
é preenchido com o "valor" da texarea antes de ser atualizado. Isso significa que seu teste deve serif( text.length +1 > maxlength) {return false;}
. Caso contrário, só seria possível colocarmaxlength - 1
chars dentro:/
if(text.length+1 > maxlength)
ouif(text.length >= maxlength)
...O pequeno problema com o código acima é que val () não aciona o evento change (), então se você usar backbone.js (ou outra estrutura para vinculação de modelo), o modelo não será atualizado.
Estou postando que a solução funcionou muito bem para mim.
fonte
Implementei o
maxlength
comportamentotextarea
recentemente e encontrei o problema descrito nesta pergunta: o Chrome conta os caracteres errados em textarea com o atributo maxlength .Portanto, todas as implementações listadas aqui funcionarão com poucos erros. Para resolver este problema, acrescento
.replace(/(\r\n|\n|\r)/g, "11")
antes.length
. E tenha isso em mente ao cortar cordas.Eu terminei com algo assim:
Não tenho certeza se isso resolve o problema completamente, mas funciona para mim por enquanto.
fonte
Experimente este jQuery que funciona no IE9, FF, Chrome e fornece uma contagem regressiva para os usuários:
fonte
Tente usar este exemplo de código:
fonte
Isso é muito mais fácil:
fonte
maxlength
porque você pode colar strings que são mais longas do que o comprimento desejado.