Comunidad de diseño web y desarrollo en internet online

IE no interpreta correctamente javascript

Citar            
MensajeEscrito el 12 Feb 2008 09:07 pm
Señores....no salgo de mi asombro.

después de realizar un pequeño script de validación para los campos de un formulario, hago la prueba en todos los navegadores principales...bien

el script debe cumplir:
- Que los campos señalados como obligatorios no estén vacíos
- Que el formato de email sea correcto
- Que los campos no estén rellenados con espacios

Vale, reconozco que estoy aprendiendo a usar javascript y que estoy muy verde...pero que este script funcione en todos los navegadores, menos en IE eso si que no me lo esperaba :cry:

Para ser exactos lo que no funciona es la comprobación que hace para ver si los campos están rellenados con espacios, es decir, si rellenas los campos con espacios lo da por valido

PORQUE DIOS!! POR QUE ME CASTIGAS CON ESTA TORTURA LLAMADA IE!!

...en fin...dejo aquí el código a ver si me podéis echar un cable...

Código :


var valido;

function soloEspacios (campo) {
   //alert (campo.value.length);
   for (i=0; i < campo.value.length ; i++) {
      //alert (campo.value.length);
      if (campo.value[i] ==" ") {
         //alert("con espacios");
         valido=false;
      } else {
         //alert ("SIN espacios");
         valido=true;
      }
   }
   if (!valido){
      alert('Por favor rellene el campo "'+campo.name+'" y borre los espacios al final del texto');
      campo.focus();
   }
      
}


function validar(form) {

   if (form.empresa.value != "") {
      soloEspacios (form.empresa);
      if (!valido) {
         return;
      }
   } else {
      alert('Por favor ingrese el nombre de la empresa \n\n Si forma parte de ninguna empresa indique "particular"' );
      form.empresa.focus();
      return;
   }

   if (form.contacto.value != "") {
      soloEspacios (form.contacto);
      if (!valido) {
         return;
      }
   } else {
      alert('Por favor ingrese el nombre de la persona de contacto');
      form.contacto.focus();
      return;
   }

   if (form.email.value != "") {
      soloEspacios (form.email);
      if (!valido) {
         return;
      }
   } else {
      alert('Por favor ingrese su correo electrónico');
      form.email.focus();
      return;
   }

   if (form.razon.value != "") {
      soloEspacios (form.razon);
      if (!valido) {
         return;
      }
   } else {
      alert('Por favor indique la razón de su consulta');
      form.razon.focus();
      return;
   }


   if (form.email.value.indexOf('@', 0) == -1 ||
      form.email.value.indexOf('.', 0) == -1) {
         alert("Dirección de e-mail inválida");
         form.email.focus();
         return;
   }


   if (valido) {
      form.submit();
   }
}

Por noctam

Claber

197 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Feb 2008 11:43 pm

noctam escribió:

[...] si rellenas los campos con espacios [...]
¿con espacios?
if (campo.value[i] ==" ")
Esto valida que haya un sólo espacio

Creo que deberías probar con uno, o más de uno, solamente.

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 13 Feb 2008 09:26 am

rizome escribió:

noctam escribió:

[...] si rellenas los campos con espacios [...]
¿con espacios?
if (campo.value[i] ==" ")
Esto valida que haya un sólo espacio

Creo que deberías probar con uno, o más de uno, solamente.
a ver, este condicional del que me hablas esta dentro de un bucle for, lo que hago es recorrer toda la cadena buscando espacios (si ya se que así realmente el único que tiene en cuenta es que el ultimo carácter sea o no espacio para que de un valor u otro a la variable "validar" pero bueno eso espero pulirlo en el futuro) utilizando el valor de "i" como indice para situarme dentro de la cadena.

El script funciona bien para todos los navegadores excepto para IE que no hace la comprobación de los espacios y es eso lo que no entiendo, porque en el resto si y en IE no.


"Creo que deberías probar con uno, o más de uno, solamente."
no te entendí bien lo que quieres decir con esto

Por noctam

Claber

197 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Feb 2008 10:30 am
mea-culpa.

Me precipité, vi el " ", y no el for.

Así las cosas, debería funcionar... pero no voy a analizar el porqué no arranca en IE.
Dejémoslo en que hay una manera más eficaz en hacer las validaciones:

EXPRESIONES REGULARES.
Con estas, puedes validar espacios, e-mails, DNI, fechas... y un sinfín de cadenas de texto.

¿Cómo aplicarlas a tu código?
Fácil.

Código :

function soloEspacios (campo)
{expreg=new RegExp('[0-9A-Ba-b]');  //que encuentre al menos un caracter [a-z] (mayúsculas/minúsculas), o un número.
 cadena=campo.value;

 if (expreg.test(cadena))
     {valido=true;}
   else
     {valido=false;}      
}


¿para e-mails?
expreg=new RegExp('(^[0-9a-zA-Z]+(?:[_.0-9a-zA-Z]{2,50}))@([0-9a-zA-Z]+(?:[_.0-9a-zA-Z]{1,50})\.[0-9a-zA-Z]{2,3})$');
¿fechas?
expreg=new RegExp('^(0[1-9]|[12]\d|3[01])(?:/|-)(0[1-9]|1[012])(?:/|-)([1][9]\d\d|[2]\d\d\d)$');



Para ayudarte a encontrar la expresión regular que mejor te funcione, yo uso este sencillo HTML:

Código :

<html>
<head><title>Validador de RegExp</title>
<script>
function validar ()
{expreg=new RegExp(document.getElementById('Exp_Reg').value);
 cadena=document.getElementById('validar').value;
  
 if(expreg == "" || cadena == "")
   {alert("Introducir una expresión regular\ny una cadena a validar.");}
 else
 if(expreg.test(cadena))
   {alert("Validada: " + cadena + "\n\n" +
    (RegExp.$1==""?"":"RegExp.$1="+RegExp.$1+"\n")+
    (RegExp.$2==""?"":"RegExp.$2="+RegExp.$2+"\n")+
    (RegExp.$3==""?"":"RegExp.$3="+RegExp.$3+"\n")+
    (RegExp.$4==""?"":"RegExp.$4="+RegExp.$4+"\n")+
    (RegExp.$5==""?"":"RegExp.$5="+RegExp.$5+"\n")+
    (RegExp.$6==""?"":"RegExp.$6="+RegExp.$6+"\n")+
    (RegExp.$7==""?"":"RegExp.$7="+RegExp.$7+"\n")+
    (RegExp.$8==""?"":"RegExp.$8="+RegExp.$8+"\n")+
    (RegExp.$9==""?"":"RegExp.$9="+RegExp.$9));     
   }
      else
   {alert("¡ Error !\n\nRechazada: " + cadena);}  
}
</script>

</head>
<body onLoad="javascript:scrollv();">
<form action="javascript:validar()">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
   <td>&nbsp;</td>
   <td>
      <script>
      <!--
         var textov='Introduzca expresión y texto. ';
         var sizess=24;
         var veloci=200;
         document.write('<input size="'+sizess+'" style="border:1px solid #888; background-color:#CCC; margin-bottom:1px;" type="text" value="'+textov+'" name="SCRLL" id="SCRLL" />');
         var tempo;
         function scrollv()
         {document.getElementById('SCRLL').value=textov;
              textov=textov.substring(1,textov.length)+textov.charAt(0); 
              tempo=setTimeout('scrollv()',veloci);
         }
      //-->
      </script>

   </td>
</tr>
<tr><td style="padding:0px 2px 0px 7px;">ExpReg:</td><td><input type="text" id="Exp_Reg" value="" size="24" /></td></tr>
<tr><td style="padding:0px 2px 0px 7px;">A validar:</td><td><input type="text" id="validar" value="" size="24" /></td></tr>
<tr><td>&nbsp;</td><td align="right"><input type="submit" value="Validar" size="24" /><br />
</td></tr>
</table>
</form>

mails: (^[0-9a-zA-Z]+(?:[_.0-9a-zA-Z]{2,50}))@([0-9a-zA-Z]+(?:[_.0-9a-zA-Z]{1,50})\.[0-9a-zA-Z]{2,3})$<br />
Hora: ^(0\d|1\d|2[0-3]):([0-5]\d):([0-5]\d)$<br />
Fecha: ^(0[1-9]|[12]\d|3[01])(?:/|-)(0[1-9]|1[012])(?:/|-)([1][9]\d\d|[2]\d\d\d)$<br />

<pre>
Oper.     Descripción     Oper.     Descripción     Oper.     Descripción
c    Caracter c no especial. Casa consigo mismo.
\c    Caracter especial c (\: carácter de escape).
^X    Comenzar con X.
X$    Finalizar con X.
X*    X cero o más veces.
.    Un caracter indivudual cualquiera.
[c1c2c3]    Conjunto de caracteres. Casa si c1 o c2 o c3.
[^c1c2c3]    Casa con caracteres distintos de c1, c2 o c3.
[c1-c2]    Rango de caracteres. Casa con cualquier caracter entre c1 y c2.
[^c1-c2]    Casa con caracteres no comprendidos entre c1 y c2.
XY    Concatenación. Casa si X va seguido de Y.
X+    X una o más veces.
X?    X cero o una vez.
(X)    Agrupa X. (Además, en JavaScript, graba en RegExp.$1...).
X|Y    Alternativa. Casa X o Y.
X{n}    X exactamente n veces.
X{n,}    X al menos n veces.
X{m,n}    X de m a nveces.
"cad"    Literal. Ignora los caracteres especiales de cad. (No se puede utilizar en JavaScript)
(?:X)    Casa X pero no lo captura.
X(?=Y)    Casa X si va seguido de Y.
X(?!=Y)    Casa X si no va seguido de Y.
X\b    X al final de una palabra.
X\B    X no está al final de una palabra.
\ctec    Carácter de control Ctrl+tec.
\d    Carácter numérico. Equivale a [0-9].
\D    Carácter no numérico. Equivale a [^0-9].
\s    Espacio en blanco (separador). Equivale a [\f\n\r\t\v].
\S    Espacio no blanco (separador). Equivale a [^\f\n\r\t\v].
\w    Carácter alfanumérico. Equivale a [A-Za-z0-9_].
\W    Carácter no alfanumérico. Equivale a [^A-Za-z0-9_].
\num    Referencia atras a subcadenas capturadas (num entero).
\xhh    Carácter cuyo código en hexadecimal es hh.
</pre>
</body>
</html>
Montalo, y podrás hacer ensayos con las expresiones regulares.
También está ahí, la tabla de diferentes "comandos" de control de expresiones de control (como el "[a-b]")

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 13 Feb 2008 10:35 am
(aquí una captura del "validador de ejemplos" del que te puse el código arriba)

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.