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 originalif (!alfanum.test(input.value))
input.className = "inputerror";
Otra posible solucion seria esta:
Código javascript
:
Ver originalfunction bordef(input, evento){
if (evento.type == 'focus')
input.className = "inputsin";
if (evento.type == 'blur'){
if(!comprovarName(input.value))
input.className = "inputerror";
else
input.className = "inputsout";
}
}
function comprovarName(texto)
{
if(texto === "") //Si lenght == 0, no saldra ningun error
return true;
if (!/^(\w)+$/.test(texto)) //Si hay caracter erroneo, hay error
return false;
return true; //Si llegamos hatsa aqui es que todo esta ok
}
PD: Quita lo que decia compatibilidad con ie, no hace falta, puedes probarlo.