Foros del Web » Programando para Internet » Javascript »

Problema tabulación y borrado al restringir input

Estas en el tema de Problema tabulación y borrado al restringir input en el foro de Javascript en Foros del Web. Buenas, tengo el siguiente problema: Utilizo un javascript para restringir determinados caracteres en un input: Código: function letras1(e) { tecla = (document.all) ? e.keyCode : ...
  #1 (permalink)  
Antiguo 02/10/2007, 08:55
 
Fecha de Ingreso: diciembre-2002
Ubicación: Madrid
Mensajes: 378
Antigüedad: 21 años, 4 meses
Puntos: 11
Problema tabulación y borrado al restringir input

Buenas, tengo el siguiente problema:

Utilizo un javascript para restringir determinados caracteres en un input:

Código:
function letras1(e) { 
    tecla = (document.all) ? e.keyCode : e.which; 
    if (tecla==8) return true;  
    patron =/[A-Z óòéèáàúùíìÁÀÉÈÍÌÓÒÚÙ´`ÑñçÇa-z]/;
   te = String.fromCharCode(tecla);
   return patron.test(te);  
}
El caso que este código funciona bien, lo único que no me funciona es la tabulación ni el botón Suprimir.

Lógicamente estos botones los tengo que añadir en patron como permitidos, pero ...

¿ como se definen estas teclas en javascript ?

Muchas gracias.
  #2 (permalink)  
Antiguo 02/10/2007, 12:38
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Problema tabulación y borrado al restringir input

Hola:

La tabulación en una expresión regular se escribe normalmente como \t, pero en este caso String.fromCharCode() para la tabulación no te va a devolver una cadena que coincida con la expresión regular \t (por lo menos en firefox, su valor para tecla es 0, y escape(String.fromCharCode(0)) da un hexadecimal cero %00 ).

Así que basta con dejar pasar el cero, tal y como dejamos pasar el 8:

Código PHP:
<input type="text" id="caja" />
<
input type="text" />

<
script type="text/javascript">
<!--

// document.getElementById abreviado
function $(x) { return document.getElementById(x); }

function 
letras1(evt) { 
    var 
tecla = (document.all) ? event.keyCode evt.which
    if ( (
tecla==8) || (tecla==0) ) return true;
    var 
patron =/[A-Z ÁÀÉÈÍÌÓÒÚÙ´`ÑÇ]/i;
    var te = String.fromCharCode(tecla);
    return patron.test(te);
}

$("caja").onkeypress = letras1;


// -->
</script> 
Para el botón suprimir no he encontrado problemas tampoco, y para IE tampoco. Por cierto, te he mejorado la validación de la variable tecla a su forma más correcta. También te faltaban muchos var (aunque no se si el código estaba embebido en uno más grande, pero sería más comodo que patron fuese global). A patron también le he dado cambios para que sea case insensitive, más cómodo.

Por último comentar el código entre <script> y </script> y olvidarnos del atributo language


Un saludo y espero que así te funcione bien
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 03/10/2007, 02:25
 
Fecha de Ingreso: diciembre-2002
Ubicación: Madrid
Mensajes: 378
Antigüedad: 21 años, 4 meses
Puntos: 11
Re: Problema tabulación y borrado al restringir input

Un 10 para tí.

Sí, se me olvidó decir que el problema era con Firefox. Pero con tu código funciona perfectamente en cualquier navegador.


Una cuestión, he probado a quitar las líneas en negrita y funciona también, ¿ no son necesarias verdad ?

Código:
// document.getElementById abreviado
function $(x) { return document.getElementById(x); }

function letras1(evt) { 
    var tecla = (document.all) ? event.keyCode : evt.which; 
    if ( (tecla==8) || (tecla==0) ) return true;
    var patron =/[A-Z ÁÀÉÈÍÌÓÒÚÙ´`ÑÇ]/i;
    var te = String.fromCharCode(tecla);
    return patron.test(te);
}

$("caja").onkeypress = letras1; 

Muchas gracias derkenuke, usuarios como tú hacen grande al foro.
  #4 (permalink)  
Antiguo 03/10/2007, 05:56
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Problema tabulación y borrado al restringir input

De nada

Pero creo que me olvidé de cambiar la validación en la variable tecla, no sé por qué:
Código PHP:
var tecla = (window.event) ? window.event.keyCode evt.which
Lo que hacemos es comprobar si se soporta window.event para utilizarlo o no, porque aunque sepamos que document.all lo soporta IE, y IE también soporta window.event, no podemos hacer esa argumentación para todos los casos. Por ejemplo si hubiera un navegador que soportase document.all y no window.event (no conozco este mismo caso) entonces el script puede que fallase.


Era sólo un apunte.


Cita:
Iniciado por benz0
Una cuestión, he probado a quitar las líneas en negrita y funciona también, ¿ no son necesarias verdad ?
Es posible que estés trabajando con una librería de javascript que tenga ya definida esa función y haga lo mismo (prototype, por ejemplo). En ese caso es mejor que elimines la definición de la función $() creada por mí. Sólo es que me gusta que los scripts que posteo se puedan probar completos y que estén definidos totalmente.


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:50.