2011-05-13 15 views
5

Saludos a todos He la siguiente función para validar la entrada dependiendo de si es numérico, alfa, alfanumérica y de correo electrónico:.Validando '%' y '(' de JavaScript

function permite(e, permitidos) { 

    var key = e.keyCode || e.which; 

    //Validate if its an arrow or delete button 
    if((key == 46) || (key == 8) || (key >= 37 && key <= 40)) 
     return true; 

    var keychar = String.fromCharCode(key); 

    switch(permitidos) { 
     case 'num': 
      permitidos = /^[0-9]$/; 
      break; 
     case 'car': 
      permitidos = /^[\sa-zA-Z]$/; 
      break; 
     case 'num_car': 
      permitidos = /^[\sa-zA-Z0-9]$/; 
      break; 
     case 'correo': 
      permitidos = /^[a-zA-Z0-9._\[email protected]]$/; 
      break; 
    } 

    return permitidos.test(keychar); 


} 

Los nombres var están en español, pero su una función fácil de entender.

El problema es el siguiente: el código de clave para '%' es 37 igual que la flecha izquierda y el código de tecla para '(' es 40 igual que la flecha derecha. no validar '%' y '(' y apesta. No sé qué hacer, por favor ayuda.

Respuesta

0

Un poco de OT (disculpas), pero es posible que desee ver una de las bibliotecas de Javascript, por ejemplo, JQuery; casi todos vienen con (o tienen) bibliotecas para "validar la entrada".

Por ejemplo: si estuviera usando jQuery puede considerar la "validación" plug-in - http://bassistance.de/jquery-plugins/jquery-plugin-validation/

+0

Debería haber habido un comentario. –

0

Compruebe que si la tecla de mayúsculas está siendo presionado además por el control de event.shiftKey:

//Validate if its an arrow or delete button 
if((key == 46) || (key == 8) || (key >= 37 && key <= 40 && !e.shiftKey)) 
    return true; 

Otra opción (según su aplicación) es manejar el evento keydown en lugar del evento keypress, que no dará lugar a la superposición de códigos de tecla.

+0

Esto solo funciona en teclados donde el usuario debe presionar 'SHIFT' para producir'% 'o' ('. –

1

El evento keypress no se dispara para las teclas de flecha y eliminar, por lo que puede eliminar su declaración if. ¡Maldita sea FireFox!

Usted está mezclando hasta keyCode y charCode, lo cual es comprensible, porque en realidad contiene event.keyCodecharCode para keyPress eventos, a diferencia de keydown y keyup. El código de clave para ( es 57 (lo mismo que para 9 - esos caracteres están en la misma tecla). Su código de caracteres es 40. Las teclas de flecha no tienen charCodes, por lo que no activan los eventos keypress. (Excepto en Firefox ... Argh!)

Su mejor opción es utilizar el evento keydown y buscar keyCode en lugar de charCode, la comprobación de teclas de cambio cuando sea necesario. Tendrá que mapear manualmente KeyCodes a los caracteres cuando se presione la tecla Mayús.

Cuestiones relacionadas