Detecção de troca / colisão em tempo real de entrada em JavaScript entre navegadores

9

Existe uma maneira entre navegadores para detectar alterações ao vivo em um campo de entrada ?

Por ao vivo , não quero dizer quando o campo perde o foco, e não no próximo pressionamento de tecla, e assim por diante. Imediatamente ou algo parecido.

Usando combinações de jQuery e .change() , .keyup() , .bind('paste') e assim por diante, posso trabalhar com a detecção de alterações ao vivo em alguns navegadores, mas nem todos . Usar combinações diferentes fará com que funcione um pouco em outros navegadores.

A coisa mais complicada para trabalhar é a manipulação do mouse do campo de entrada - selecionando e movendo o texto (que é essencialmente cortar e colar), clicando com o botão direito e colando ou cortando, etc. razão mesmo .mousedown() e .mouseup() não parecem cortá-lo.

A única solução entre navegadores em que consigo pensar agora é verificar o valor do campo de entrada a cada 100 milissegundos e comparar o valor com um valor armazenado. Mas isso parece ser um exagero quando a solução baseada em eventos chega tão perto.

Existe um plug-in jQuery que já faz isso? Ou existe alguma outra maneira de conseguir isso?

    
por javascripteroo 20.06.2010 в 17:15
fonte

2 respostas

2

Para concluir seus manipuladores de alterações e chaves, você pode adicionar manipuladores para recortar / copiar / colar . Eles funcionam no Firefox > = 3, IE, Safari e Chrome (mas não no Opera / Konqueror).

Isso cobriria tudo para o seu caso de uso?

    
por Chris Lercher 20.06.2010 / 17:29
fonte
1

Dependendo dos navegadores dos quais você precisa dar suporte, você pode usar a entrada do HTML5.
Ele dispara imediatamente quando a entrada monitorada é alterada. Em jQuery você apenas faria:

$('#my-input').bind('input', function(e) {
    console.log("#my-input's value changed");
});
    
por raphinesse 02.08.2011 / 15:13
fonte