2010-08-23 27 views
5

Tengo un campo de texto de entrada que necesita ser limitado en cuanto a qué caracteres se pueden escribir. Como una forma de defensa contra la entrada defectuosa, intento no dejar que el usuario escribe cosas incorrectas La entrada puede ser de caracteres [a-zA-Z -._] y está limitada a 32 caracteres.Impedir la entrada de caracteres especiales al campo de texto html

<input id="aliasEntry" type="text" maxlength="32"> 

Como se puede ver, ya tengo el límite de 32 caracteres resuelto, y se evita que el usuario escriba más después de que se haya alcanzado el límite. Pero estoy teniendo un problema para evitar la entrada de caracteres incorrectos.

He intentado usar .keypress de jQuery() y .keydown) los receptores de eventos (hacer cosas similares a lo siguiente:

$("#aliasEntry").keypress(function(e) 
{ 
    var code = e.which || e.keyCode; 
    // 65 - 90 for A-Z and 97 - 122 for a-z 95 for _ 45 for - 46 for . 
    if (!((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code == 95 || code == 46 || code == 45)) 
    { 
     var text = $("#aliasEntry").val(); 
     text = text.substring(0,text.length); 
     $("#aliasEntry").val(text); 
    } 
}); 

pero el problema con esto es que los navegadores siempre inserte el carácter escrito en el cuadro de texto DESPUÉS de que se haya manejado el evento, lo que hace que el código sea inútil porque aún no se ha ingresado el carácter que intento eliminar. ¿Hay alguna forma de evitar que el navegador inserte el carácter en el cuadro de texto una vez que el usuario lo haya escrito?

+2

Al usar jQuery, no tiene que volver a normalizar ['e.which'] (http://api.jquery.com/event.which/). –

+0

Tenga en cuenta que sería mejor tener alguna IU explicando por qué el teclado del usuario dejó de funcionar repentinamente. – derobert

+2

Recuerde hacer la validación del lado del servidor también. La validación del cliente es realmente fácil de engañar (desactive JavaScript en mi navegador en este caso) –

Respuesta

5

Estás usando jQuery, así que mira esto: http://api.jquery.com/event.preventDefault/. Simplemente llame al e.preventDefault() si el carácter no es válido, y esto debería evitar que ocurra la acción predeterminada del navegador, que en este caso sería la inserción de un carácter.

+0

Y hágalo durante 'keypress'; en Opera, no puede evitar la acción predeterminada durante 'keydown'. –

+0

Sí funciona muy bien. Estaba mirando en esa dirección también para ver si el evento simplemente podía detenerse, pero estaba jugando con los métodos incorrectos. ¡Gracias! – JDC

0

Use su entrada como esta

<input maxlength="32" onKeyUp="chText()" onKeyDown="chText()" id="aliasEntry"/> 

y crea chText() función en Javascript escribir en ella este código de abajo

function chText() 
{ 
    var str=document.getElementById("aliasEntry"); 
    var regex=/[^a-z]/gi; 
    str.value=str.value.replace(regex ,""); 
} 

que no permitirá que cualquier char a entrar excepto a-z y A-Z

Cuestiones relacionadas