Descobri que o evento de alteração do jQuery em uma caixa de texto não é acionado até clicar fora da caixa de texto.
HTML:
<input type="text" id="textbox" />
JS:
$("#textbox").change(function() {alert("Change detected!");});
Veja a demonstração no JSFiddle
Meu aplicativo requer que o evento seja acionado em cada alteração de caractere na caixa de texto. Eu até tentei usar o keyup ...
$("#textbox").keyup(function() {alert("Keyup detected!");});
... mas é um fato conhecido que o evento keyup não é acionado com o botão direito do mouse e colar.
Alguma solução alternativa? Os dois ouvintes vão causar problemas?
Respostas:
A ligação a ambos os eventos é a maneira típica de fazer isso. Você também pode vincular ao evento de colar.
Você pode vincular a vários eventos como este:
Se você quisesse ser pedante sobre isso, também deve vincular a mouseup para arrastar o texto e adicionar uma
lastValue
variável para garantir que o texto realmente seja alterado:E se você quer ser
super duper
pedante, deve usar um temporizador de intervalo para atender ao preenchimento automático, plugins, etc:fonte
.on('change keyup paste', function() {...}
realmente dispara várias vezes! Se eu digitar um caractere e depois clicar fora, os eventos 'change' e 'keyup' serão acionados, levando a função a ser executada várias vezes! Se eu clicar com o botão direito do mouse em colar e depois clicar fora, 'alterar' e 'colar' serão acionadas. Heck! Ao usar Ctrl + V para colar e clicar fora, ele é acionado três vezes!lastValue
variável para garantir que ela realmente foi alterada.Nos navegadores modernos, você pode usar o
input
evento :DEMO
fonte
Isso funciona para digitar, colar, clicar com o botão direito do mouse, etc.
fonte
HTML:
JS:
fonte
Tente o seguinte:
Veja a demonstração no JSFiddle .
fonte
bind()
?keyup
echange()
tem seu próprio comportamento típico de modo id ele quer executar evento, em seguida,paste
pode ser a opçãobind
vez deon
.Experimente o código abaixo:
fonte
event to be fired on every character change in the textbox
"...but it's a known fact that the keyup event isn't fired on right-click-and-paste."
Ler seus comentários me levou a uma correção suja. Sei que não é o caminho certo, mas pode ser uma solução alternativa.
fonte