Foros del Web » Programando para Internet » Javascript »

Restringir caracteres en una caja de texto

Estas en el tema de Restringir caracteres en una caja de texto en el foro de Javascript en Foros del Web. Hola foreros, Tengo un pequeño problemilla, tengo poca o ninguna idea de JavaScript y se me ha asignado una tarea que para mi a priori ...
  #1 (permalink)  
Antiguo 01/10/2008, 06:42
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 0
Restringir caracteres en una caja de texto

Hola foreros,

Tengo un pequeño problemilla, tengo poca o ninguna idea de JavaScript y se me ha asignado una tarea que para mi a priori requiere de dificultad.

Tengo un componente CajaTexto que fue creado por unos arquitectos hace tiempo y el problema es que se les ha encontrado un problema cuando se inserta " <! " pega un castañazo porque lo confunde con código HTML (o eso creo).

Mi idea en principio es la de impedir que el usuario introduzca esos 2 caracteres asi que a ver si alguien tiene idea y me lo puede poner clarito (como pa tontos).

Un saludo y gracias a todos
  #2 (permalink)  
Antiguo 01/10/2008, 06:59
Avatar de Legoltaz  
Fecha de Ingreso: agosto-2008
Mensajes: 325
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: Restringir caracteres en una caja de texto

Código javascript:
Ver original
  1. <form name="frm">
  2. <input name="inp" onkeyup="valida()" />
  3. </form>
  4. <script>
  5. function v(){
  6.     for(var i = 0;i < document.frm.inp.value.length;i++){
  7.         if(document.frm.inp.value.charAt(i) == '<!'){// si encuentra en el textbox <!
  8.             document.frm.inp.value = ''; // borra su contenido
  9.         }
  10.     }
  11. }
  12. </script>
  #3 (permalink)  
Antiguo 01/10/2008, 07:52
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Restringir caracteres en una caja de texto

Ok gracias por el codigo, funciona perfectamente, lo unico que me gustaria, si fuese posible que no te deje insertar esos caracteres en vez de que te haga la validacion una vez insertada la cadena.

Gracias
  #4 (permalink)  
Antiguo 01/10/2008, 07:58
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Restringir caracteres en una caja de texto

En ese caso puedes usar el evento onkeypress y comprobar si la tecla pulsada es la que no se quiere permitir, y si así es cancelar la acción de la tecla.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 01/10/2008, 12:18
Avatar de Legoltaz  
Fecha de Ingreso: agosto-2008
Mensajes: 325
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: Restringir caracteres en una caja de texto

A ver si esto te sirve:

Código javascript:
Ver original
  1. <script>
  2. function v(){
  3.     var area = document.forms['frm']['area'];
  4.     for(var i = 0;i < area.value.length;i++){
  5.         if(area.value.charAt(i) == '<' || area.value.charAt(i) == '!'){
  6.             area.value = area.value.substring(0,i);
  7.         }
  8.     }
  9. }
  10. </script>

Código html:
Ver original
  1. <form name="frm">
  2. <textarea name="area" onkeyup="v()"></textarea>
  3. </form>
  #6 (permalink)  
Antiguo 01/10/2008, 12:33
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Restringir caracteres en una caja de texto

Yo sigo opinando que es mejor usar el onkeypress y cancelar la acción del evento. Porque de la forma como propones, Legoltaz, si te sitúas en el medio y escribes los caracteres no permitidos se borra el resto de la cadena, podría solucionarse concatenando el resto del contenido, pero nuevamente habría que posicionar el cursor a su lugar correcto, o sea, mucho trabajo .

EDITO: Además de lo que comentó buzu (hola ), otro choque en el día .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 01/10/2008, 12:35
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Restringir caracteres en una caja de texto

Un pequeño gran problema con tu código legoltaz.

Usas un loop cada vez que se presiona una tecla.

Que hacer en este caso?

1)Especificar al usuario que el caracter no está permitido, mas del 50% de tus usuarios no lo usará y si lo hace, al menos sabrá por que no se imprime. De otro modo estará intentando usarlo sin que se imprima y se frustrará.

2)No compares el valor del campo de texto, compara el valor de la tecla presionada, así te evitas usar el loop y le haces el trabajo mas sencillo al ordenador.

La sugerencia de David el Grande es mas eficiente en este caso que la proporcionada por legoltaz.
__________________
twitter: @imbuzu
  #8 (permalink)  
Antiguo 01/10/2008, 12:36
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Restringir caracteres en una caja de texto

Chocamos David....
__________________
twitter: @imbuzu
  #9 (permalink)  
Antiguo 02/10/2008, 02:24
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 0
De acuerdo Respuesta: Restringir caracteres en una caja de texto

Bien hay va la solucion por la que opte:

var code = event.keyCode ? event.keyCode : event.charCode;
var tecla = String.fromCharCode(code);

if (tecla == '<' || tecla == '!'){
event.returnValue = false;
return false;
}

Este fragmento de codigo lo inserte en una funcion que se evaluava siempre del componente (lo mas eficiente hubiese sido crearme una funcion nueva relacionada como bien habeis dicho con el onKeyPress pero si hacia eso tendria que generar la dll donde están los controles).

Ahora lanzo otra pregunta al aire. He insertado este cógido en otro componente pensado que funcionaria perfertamente pero cual es mi sorpresa cuando veo que en vez de cogerme el caracter "<" me cogia una a minuscula con un gorrito (Cod ASCII 226) y cuando insertaba el caracter "!" me cogia un "1".

¿Alguien sabe a que se puede deber eso?.

Un saludo.

PSD: Gracias por vuestra ayuda y opiniones.
  #10 (permalink)  
Antiguo 02/10/2008, 07:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Restringir caracteres en una caja de texto

Yo he probado usando el onkeypress en IE, Firefox y Opera y funcionó sin problemas.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 02/10/2008, 11:51
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Restringir caracteres en una caja de texto

Quizá sea tu teclado jajajaja
__________________
twitter: @imbuzu
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 20:52.