2011-10-14 13 views
5

¿Cuál es la manera más limpia en JavaScript o jQuery para filtrar las claves de control . Por teclas de control, me refiero a cualquier tecla que NO ES A-Z, 0-9, o caracteres especiales (es decir,!, @, #, Etc.). Simplemente quiero filtrar claves como 'Shift', 'Alt', F1-F9, Bloq Mayús, etc.jQuery/Javascript - Rechazar las teclas de "control" en el evento keyDown

Estoy seguro de que podría verificar cada código ASCII individual del argumento del evento ... pero yo Me pregunto si hay una solución "limpia".

Nota: Estoy desarrollando una aplicación específicamente para IE 8

Respuesta

5

Fui con algo como esto:

function (e, inputElement) { 
    // If the user gives the textbox any keyboard input, mark the input box as "dirty" 
    var scope = this; 
    var k = e.which; 

    // Verify that the key entered is not a special key 
    if (k == 20 /* Caps lock */ 
    || k == 16 /* Shift */ 
    || k == 9 /* Tab */ 
    || k == 27 /* Escape Key */ 
    || k == 17 /* Control Key */ 
    || k == 91 /* Windows Command Key */ 
    || k == 19 /* Pause Break */ 
    || k == 18 /* Alt Key */ 
    || k == 93 /* Right Click Point Key */ 
    || (k >= 35 && k <= 40) /* Home, End, Arrow Keys */ 
    || k == 45 /* Insert Key */ 
    || (k >= 33 && k <= 34) /*Page Down, Page Up */ 
    || (k >= 112 && k <= 123) /* F1 - F12 */ 
    || (k >= 144 && k <= 145)) { /* Num Lock, Scroll Lock */ 
     return false; 
    } 
    else { 
     scope.setPointValueDirtyStatus(inputElement, true); 
    } 
} 
+0

Sí. La fuerza bruta parece ser necesaria :( – Zeek

+0

BTW ¿Qué es la "Tecla de clic del botón derecho"? – Zeek

3

Uso event.which - Cada tecla tiene su propio código. La tecla de control es 17, la tecla de mayúsculas es 16, y @ es dos teclas diferentes, 16 seguido de 50. Use la demostración en esa página para averiguar qué valores se devuelven para cada tecla que desea aceptar o ignorar.

1

Esto solo permitirá a-z (códigos 65 - 90), 0-9 (48 - 57). Tenga en cuenta que se debe permitir shift, porque es necesario para transformar un texto en mayúsculas.

$("...").keydown(function(ev){ 
    var k = ev.which; 
    if(!(k >= 65 && k <= 90) /* a-z */ 
    || !(k >= 48 && k <= 57) /* numbers */ 
    || !(k >= 96 && k <= 111) /* numeric keyboard*/ 
    || k != 59 || k != 61 || k != 188 || k != 190 || k != 191 || k != 191 
    || k != 192 || !(k >= 219 && k <= 222) || k != 32 /* Comma's, etc. */ 
    || ev.ctrlKey || ev.altKey/* || ev.shiftKey*/){ 
     //Filter 
    } 
}) 
+0

¿Cómo funciona este acuerdo con caracteres Unicode como umlats alemanes? ¿Capitales? – Zeek

Cuestiones relacionadas