event javascript jquery keypress

javascript - event - jquery on



jQuery: cómo filtrar las claves que no son de carácter en el evento keypress? (4)

Intenté buscar pero no estoy seguro de qué términos buscar.

Estoy usando jQuery y me gustaría utilizar el evento de pulsación de tecla en un cuadro de texto, pero evito que se activen todos los caracteres no imprimibles (es decir, Enter , ESC , teclas de flecha, retroceso , tabulación , ctrl , insertar , F1 - F12 , etc.) el evento.

¿Hay alguna manera fácil de determinar si es imprimible?


La respuesta seleccionada para esta pregunta no está completa. No maneja el caso donde se está presionando una tecla de carácter en combinación con una tecla modificadora (por ejemplo, CTRL - A ).

Intenta, por ejemplo, escribir CTRL - A usando Firefox con el siguiente código. La respuesta actual lo considerará como un personaje:

HTML:

<input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/>

JavaScript:

$("input").keypress(function (e) { if (e.which !== 0) { alert(String.fromCharCode(e.which)); } });

http://jsfiddle.net/4jx7v/

Nota: una alerta no se activará si se usan algunos navegadores (como Chrome), ya que no activan un evento de pulsación de tecla para entradas que no son de carácter.

Una mejor solución podría ser:

HTML:

<input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/>

JavaScript:

$("input").keypress(function (e) { if (e.which !== 0 && !e.ctrlKey && !e.metaKey && !e.altKey ) { alert(String.fromCharCode(e.which)); } });

http://jsfiddle.net/hY5f4/

En este caso, la alerta solo se activa cuando se presiona A, no CTRL - A para todos los navegadores.


Puedes usar expresiones regulares como esta

$(''something'').keypress(function(e) { if(e.match(YourRegularExpressionHere)) { //do something } });

Esto solo hará algo si coincide con la expresión regular.

Eche un vistazo a las expresiones regulares. http://www.regular-expressions.info/javascript.html


Verificar las combinaciones de teclas no será la mejor solución en todos los casos. Por ejemplo, si usa una combinación de teclas para escribir un carácter, eso bloqueará el evento onkeypress , cuando no debería.

Pruébalo aquí y verás que no funcionará: http://jsfiddle.net/4jx7v/

(En una Mac, pruebe alt + una letra y en Windows, pruebe alt + una serie de teclas numéricas).

Una alternativa a esto sería simplemente verificar si el valor de entrada ha cambiado desde el anterior, de esa manera, usted sabe con certeza que algo fue escrito.

JavaScript:

var previousValue; $("input").keypress(function (e) { if (previousValue != $(this).val()) { alert(''Something has been typed.''); } });


<script> $("input").keypress(function (e) { if (e.which !== 0 && !e.ctrlKey && !e.metaKey && !e.altKey) { alert(String.fromCharCode(e.which)); } }); </script>

Parece funcionar bien con jQuery 1.4.2, FF, IE, Chrome.

Para profundizar en el desorden que es el manejo de eventos del teclado JS, consulte: Locura de JavaScript: eventos del teclado

Actualizado para filtrar las combinaciones de teclas ctrl, meta y alt según el comentario de Daniel .