Exceto changeapenas os disparos quando o campo perde o foco. inputdispara imediatamente.
jcsanyi
3
Você já tentou pesquisar?
undefined
2
@undefined Sim, eu tenho, caso contrário eu não teria criado uma pergunta para ele. A única coisa que aparece no Google são artigos sobre o input elemento e como anexar eventos a ele.
Ocorre quando o conteúdo do texto de um elemento é alterado através da interface do usuário.
Não é um alias para, keyupporque keyupserá acionado mesmo que a tecla não faça nada (por exemplo: pressionar e soltar a tecla Control acionará um keyupevento).
Uma boa maneira de pensar sobre isso é assim: é um evento que dispara sempre que a entrada é alterada. Isso inclui - mas não se limita a - pressionar as teclas que modificam a entrada (por exemplo, Ctrlpor si só, não acionará o evento, mas Ctrl-Vcolar algum texto), selecionando uma opção de preenchimento automático, no meio do estilo Linux -clique em colar, arraste e solte e muitas outras coisas.
Consulte esta página e os comentários sobre esta resposta para obter mais detalhes.
Você sabe se o jQuery compõe o suporte ao navegador ausente? (Inconsistências IE8, IE9, etc)
jcsanyi
4
Acabei de pesquisar no 'js input event'. Existe um talento especial para saber quais termos usar para encontrar o que você deseja no google; isso vem com experiência. E então, é claro, o Google registra tudo e o usa para aprender o que você realmente deseja. A maioria das minhas pesquisas são sobre documentos de API e perguntas de programação; portanto, ao longo do tempo, aprendi que, quando eu procuro por coisas, ele provavelmente deve me mostrar documentos de API e respostas de programação.
J David Smith
3
Bem, eu estava procurando por "evento de entrada jQuery", não fazia ideia de que era um evento JS original. Mesmo aqui, os primeiros resultados são geralmente do SO, que considero principalmente como respostas de fato / fontes oficiais de informação.
silkfire
18
inputna verdade, é mais do que apenas um filtro keyup, por exemplo, será acionado também quando o valor foi selecionado na lista de valores usados anteriormente ... Era algo que seria muito difícil de manipular se não houvesse inputevento.
Szeryf # 9/13
2
oninputtambém é acionado quando o texto é alterado pelo mouse (por meio de arrastar e soltar, ou pelo menu do botão direito ou clique com o botão do meio para colar).
Denilson Sá Maia
157
oninput O evento é muito útil para rastrear alterações nos campos de entrada.
No entanto, ele não é suportado na versão IE <9. Mas versões mais antigas do IE têm seu próprio evento proprietário onpropertychangeque faz o mesmo que oninput.
Então você pode usá-lo desta maneira:
$(':input').on('input propertychange');
Para ter um suporte completo ao navegador.
Como a alteração da propriedade pode ser acionada para QUALQUER alteração de propriedade, por exemplo, a propriedade desativada é alterada, você deve incluir o seguinte:
Exatamente o que eu precisava. Obrigado. (Eu odeio ter que suporte <IE9.)
DaleyKD
Mais informações: "O Opera não dispara um evento de entrada após soltar o texto em um campo de entrada. O IE 9 não dispara um evento de entrada quando o usuário remove caracteres da entrada preenchida pelas operações de teclado, corte ou arraste". developer.mozilla.org/pt-BR/docs/Web/Events/…
tkane2000
Há um problema com este código. Se maxlength é definida no elemento de entrada, o evento 'input' é acionado mesmo quando o comprimento máximo é alcançado eo valor não é alterado
nivcaner
Mas por que não apenas duas funções separadas? Dessa forma, não há necessidade de verificar o tipo de evento ou o nome da propriedade. O código pode estar em uma terceira função compartilhada.
ADTC
17
Usando jQuery, os seguintes são idênticos em efeito:
Com o inputevento, no entanto, apenas o segundo padrão parece funcionar nos navegadores que testei.
Assim, você esperaria que isso funcionasse, mas NÃO (pelo menos atualmente):
$(':text').input(function(){ doSomething();});
Novamente, se você quiser aproveitar a delegação de eventos (por exemplo, para configurar o evento #containerantes de sua input.textinclusão no DOM), isso deve ser lembrado:
Como disse claustrofob, o oninput é suportado pelo IE9 +.
No entanto , "O evento oninput é incorreto no Internet Explorer 9. Ele não é acionado quando os caracteres são excluídos de um campo de texto pela interface do usuário apenas quando os caracteres são inseridos. Embora o evento onpropertychange seja suportado no Internet Explorer 9, mas da mesma forma que o evento oninput, também é de buggy, não é acionado na exclusão.
Como os caracteres podem ser excluídos de várias maneiras (teclas Backspace e Delete, CTRL + X, Recortar e Excluir no menu de contexto), não há uma boa solução para detectar todas as alterações. Se os caracteres forem excluídos pelo comando Excluir do menu de contexto, a modificação não poderá ser detectada em JavaScript no Internet Explorer 9. "
Eu tenho bons resultados vinculando a entrada e keyup (e keydown, se você deseja acionar no IE enquanto mantém pressionada a tecla Backspace).
Acho que 'input' simplesmente funciona aqui da mesma forma que 'oninput' no DOM Level O Event Model.
Aliás:
Assim como o silkfire comentou, eu também pesquisei no 'evento de entrada jQuery'. Assim, fui levado até aqui e fiquei surpreso ao saber que 'input' é um parâmetro aceitável para o comando bind () do jquery . No jQuery in Action (p. 102, 2008 ed.), 'Input' não é mencionado como um evento possível (contra outros 20, de 'blur' a 'unload'). É verdade que, na p. 92, pode-se supor o contrário da releitura (isto é, de uma referência a diferentes identificadores de string entre os modelos de nível 0 e nível 2). Isso é bastante enganador.
No entanto, eles não são todos suportados por todos os navegadores.
A Mozilla declara o seguinte sobre o evento de entrada:
O evento de entrada DOM é acionado de forma síncrona quando o valor de um ou elemento é alterado. Além disso, é acionado em editores editáveis por conteúdo quando seu conteúdo é alterado.
change
apenas os disparos quando o campo perde o foco.input
dispara imediatamente.input
elemento e como anexar eventos a ele.Respostas:
Não é um alias para,
keyup
porquekeyup
será acionado mesmo que a tecla não faça nada (por exemplo: pressionar e soltar a tecla Control acionará umkeyup
evento).Uma boa maneira de pensar sobre isso é assim: é um evento que dispara sempre que a entrada é alterada. Isso inclui - mas não se limita a - pressionar as teclas que modificam a entrada (por exemplo,
Ctrl
por si só, não acionará o evento, masCtrl-V
colar algum texto), selecionando uma opção de preenchimento automático, no meio do estilo Linux -clique em colar, arraste e solte e muitas outras coisas.Consulte esta página e os comentários sobre esta resposta para obter mais detalhes.
fonte
input
na verdade, é mais do que apenas um filtrokeyup
, por exemplo, será acionado também quando o valor foi selecionado na lista de valores usados anteriormente ... Era algo que seria muito difícil de manipular se não houvesseinput
evento.oninput
também é acionado quando o texto é alterado pelo mouse (por meio de arrastar e soltar, ou pelo menu do botão direito ou clique com o botão do meio para colar).oninput
O evento é muito útil para rastrear alterações nos campos de entrada.No entanto, ele não é suportado na versão IE <9. Mas versões mais antigas do IE têm seu próprio evento proprietário
onpropertychange
que faz o mesmo queoninput
.Então você pode usá-lo desta maneira:
Para ter um suporte completo ao navegador.
Como a alteração da propriedade pode ser acionada para QUALQUER alteração de propriedade, por exemplo, a propriedade desativada é alterada, você deve incluir o seguinte:
fonte
Usando jQuery, os seguintes são idênticos em efeito:
Com o
input
evento, no entanto, apenas o segundo padrão parece funcionar nos navegadores que testei.Assim, você esperaria que isso funcionasse, mas NÃO (pelo menos atualmente):
Novamente, se você quiser aproveitar a delegação de eventos (por exemplo, para configurar o evento
#container
antes de suainput.text
inclusão no DOM), isso deve ser lembrado:Infelizmente, novamente, NÃO funciona atualmente!
Somente esse padrão funciona:
EDITADO COM MAIS INFORMAÇÕES ATUAIS
Certamente posso confirmar que esse padrão:
AGORA FUNCIONA também, em todos os navegadores 'padrão'.
fonte
Como disse claustrofob, o oninput é suportado pelo IE9 +.
No entanto , "O evento oninput é incorreto no Internet Explorer 9. Ele não é acionado quando os caracteres são excluídos de um campo de texto pela interface do usuário apenas quando os caracteres são inseridos. Embora o evento onpropertychange seja suportado no Internet Explorer 9, mas da mesma forma que o evento oninput, também é de buggy, não é acionado na exclusão.
Como os caracteres podem ser excluídos de várias maneiras (teclas Backspace e Delete, CTRL + X, Recortar e Excluir no menu de contexto), não há uma boa solução para detectar todas as alterações. Se os caracteres forem excluídos pelo comando Excluir do menu de contexto, a modificação não poderá ser detectada em JavaScript no Internet Explorer 9. "
Eu tenho bons resultados vinculando a entrada e keyup (e keydown, se você deseja acionar no IE enquanto mantém pressionada a tecla Backspace).
fonte
Cuidado ao usar INPUT. Este evento dispara no foco e no desfoque no IE 11. Mas é acionado na alteração em outros navegadores.
https://connect.microsoft.com/IE/feedback/details/810538/ie-11-fires-input-event-on-focus
fonte
Acho que 'input' simplesmente funciona aqui da mesma forma que 'oninput' no DOM Level O Event Model.
Aliás:
Assim como o silkfire comentou, eu também pesquisei no 'evento de entrada jQuery'. Assim, fui levado até aqui e fiquei surpreso ao saber que 'input' é um parâmetro aceitável para o comando bind () do jquery . No jQuery in Action (p. 102, 2008 ed.), 'Input' não é mencionado como um evento possível (contra outros 20, de 'blur' a 'unload'). É verdade que, na p. 92, pode-se supor o contrário da releitura (isto é, de uma referência a diferentes identificadores de string entre os modelos de nível 0 e nível 2). Isso é bastante enganador.
fonte
O jQuery possui a seguinte assinatura para o
.on()
método:.on( events [, selector ] [, data ], handler )
Eventos podem ser qualquer um dos listados nesta referência:
https://developer.mozilla.org/en-US/docs/Web/Events
No entanto, eles não são todos suportados por todos os navegadores.
A Mozilla declara o seguinte sobre o evento de entrada:
fonte
trabalhando no IE e no chrome
fonte
bind
é preterida, o usoon