Como detecto evento de alteração na área de texto usando javascript?
Estou tentando detectar quantos caracteres restantes estão disponíveis enquanto você digita.
Eu tentei usar o evento onchange, mas isso só aparece quando o foco está fora.
javascript
teepusink
fonte
fonte
onkeyup
é um evento terrível para a detecção de entrada. Useoninput
eonpropertychange
(para suporte do IE).onchange
é acionado quando ocorre um recorte / colagem no menu de contexto.Estamos em 2012, a era pós-PC chegou e ainda temos que lutar com algo tão básico quanto isso. Isso deve ser muito simples .
Até que esse sonho seja realizado, eis a melhor maneira de fazer isso, em vários navegadores: use uma combinação dos eventos
input
eonpropertychange
, da seguinte forma:O
input
evento cuida do IE9 +, FF, Chrome, Opera e Safari eonpropertychange
cuida do IE8 (também funciona com o IE6 e 7, mas existem alguns bugs).A vantagem de usar
input
eonpropertychange
é que eles não disparam desnecessariamente (como ao pressionar as teclasCtrl
ouShift
); portanto, se você deseja executar uma operação relativamente cara quando o conteúdo da área de texto muda, este é o caminho a seguir .Agora, o IE, como sempre, faz um trabalho sem sentido para apoiar isso:
input
nemonpropertychange
dispara no IE quando os caracteres são excluídos da área de texto. Portanto, se você precisar lidar com a exclusão de caracteres no IE, usekeypress
(em vez de usarkeyup
/keydown
, porque eles são acionados apenas uma vez, mesmo que o usuário pressione e mantenha pressionada uma tecla).Fonte: http://www.alistapart.com/articles/expanding-text-areas-made-elegant/
EDIT: Parece que até a solução acima não é perfeita, como corretamente apontado nos comentários: a presença da
addEventListener
propriedade na área de texto não implica que você esteja trabalhando com um navegador sensato; Da mesma forma, a presença daattachEvent
propriedade não implica IE. Se você deseja que seu código seja realmente hermético, considere mudar isso. Veja o comentário de Tim Down para obter dicas.fonte
addEventListener
não implica suporte para oinput
evento ou vice-versa); a detecção de recursos seria melhor. Veja esta postagem do blog para uma discussão sobre isso.oninput
é assim que devemos fazer isso, mas você provavelmente não deveria estar usandoaddEventListener
como teste para suporte ao navegador. +1 em qualquer caso.keypress
evento para lidar com esse caso no IE9 (e possivelmente também em versões posteriores).input
O manipulador de eventos também pode ser definido implementando a.oninput
propriedade do objetoNão testado no Firefox.
fonte
Sei que essa não é exatamente sua pergunta, mas achei que isso poderia ser útil. Para certas aplicações, é bom que a função de alteração seja acionada nem sempre que uma tecla é pressionada. Isso pode ser alcançado com algo como isto:
Isso funciona testando se um evento mais recente foi disparado dentro de um certo período de atraso. Boa sorte!
fonte
Eu sei que essa pergunta era específica para JavaScript, no entanto, parece não haver uma maneira boa e limpa de SEMPRE detectar quando uma área de texto é alterada em todos os navegadores atuais. Aprendi que o jquery cuidou disso para nós. Ele até lida com alterações de menu contextual em áreas de texto. A mesma sintaxe é usada independentemente do tipo de entrada.
ou
fonte
bind("input cut paste"...
e funciona como um encanto - digitando, recortando e colando usando o teclado ou o menu de contexto; até arraste / solte o texto.change
evento paratextarea
.Você pode ouvir o evento sobre a alteração da área de texto e fazer as alterações conforme desejado. Aqui está um exemplo.
fonte
A digitação deve ser suficiente se combinada com o atributo de padrão / validação de entrada HTML5. Portanto, crie um padrão (regex) para validar a entrada e agir de acordo com o status .checkValidity (). Algo como abaixo poderia funcionar. No seu caso, você deseja que uma regex corresponda ao comprimento. Minha solução está em uso / pode ser demo on-line aqui .
fonte
Código que usei para o IE 11 sem jquery e apenas para uma única área de texto:
Javascript:
e html:
fonte
Tente este. É simples e, desde 2016, tenho certeza de que funcionará na maioria dos navegadores.
fonte
A melhor coisa que você pode fazer é definir uma função a ser chamada em um determinado período de tempo e essa função para verificar o conteúdo da sua área de texto.
fonte