Ver Mensaje Individual
  #12 (permalink)  
Antiguo 27/02/2009, 17:29
Avatar de jeybi
jeybi
 
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Duda en "deselección"

Cita:
He cambiado el comprovarName(input.value) (he sacado el value) ya que sinó, después en el if de la expresión regular, no sabía como tirar atrás. Es decir, el input.className ahora va, pero sinó en realidad sería input.value.className. Por curiosidad, con el input.value, no podemos llegar al "input", o sí?
Mm no, por que input.value devuelve una string, no hay forma de que tu funcion sepa de donde salio esa string.

Cita:
Lo que me lleva de cabeza es que ahora me funciona: cuando pones ''' (por ejemplo)en el nombre del remitente (donde lo estoy probando), se recuadra rojo. Vale, hasta aquí perfecto. El problema es que si lo soluciono, no me vuelve a poner el borde que toca, y no se el porqué.

Es curioso. Si después de ponerlo mal selecciono otra vez el campo (debería ponerse la clase inputsin, del primer if de todos, el del focus), me cambia el color de fondo (eso es lo que hace la clase inputsin, cambiar el fondo y el borde) pero NO el borde. Y aunque esté bien, me lo deja en rojo (es decir, que al hacer el inputsout... Me pone el fondo bien de nuevo, pero no el borde).

Alguna idea de por qué puede ser?
Siento ser tan pesado...

Muchas gracias!
Lo que pasa esque cuando pones "input.style.border = "thin solid red";" estas añadiedo una propiedad nueva que tiene mas prioridad sobre la clase en la que esta, es decir imagina que al ejecutar esta linea pasa lo siguiente

<input .... style="border:this solid ridge" ...>

Entonces se sobreescribe el valor de la clase para el borde (lo que pasaria normalmente por que el css en linea tiene mas prioridad que el css que se aplica a una clase)

Una posible solucion:

.inputerror {
border: thin solid red;
}

Y el javascript:

Código javascript:
Ver original
  1. if (!alfanum.test(input.value))
  2.             input.className = "inputerror";

Otra posible solucion seria esta:
Código javascript:
Ver original
  1. function bordef(input, evento){
  2.        if (evento.type == 'focus')
  3.     input.className = "inputsin";
  4.    
  5.     if (evento.type == 'blur'){
  6.         if(!comprovarName(input.value))
  7.             input.className = "inputerror";    
  8.         else
  9.             input.className = "inputsout";
  10.     }
  11. }
  12.  
  13. function comprovarName(texto)
  14. {
  15.         if(texto === "")    //Si lenght == 0, no saldra ningun error
  16.             return true;            
  17.         if (!/^(\w)+$/.test(texto))    //Si hay caracter erroneo, hay error
  18.             return false;        
  19.            
  20.         return true;            //Si llegamos hatsa aqui es que todo esta ok
  21. }

PD: Quita lo que decia compatibilidad con ie, no hace falta, puedes probarlo.