Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Javscript errores formulario e-mail

Estas en el tema de Javscript errores formulario e-mail en el foro de Javascript en Foros del Web. Como podría hacer que en un formularo de usuario add salgan los errores por separado. FORM Código HTML: <div class= "form-group" > <label> E-mail </label> ...
  #1 (permalink)  
Antiguo 03/04/2017, 13:07
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Javscript errores formulario e-mail

Como podría hacer que en un formularo de usuario add salgan los errores por separado.

FORM
Código HTML:
<div class="form-group">
      <label>E-mail</label>
      <input name="strEmail" id="strEmail" class="form-control" placeholder="e-mail">
  </div>
       <!-- Validacion -->
        <div class="alert alert-danger oculto" id="errorE-mail">
            E-mail es un campo obligatorio.
         </div>
        <!-- /.Validacion -->
        <!-- Validacion -->
          <div class="alert alert-danger oculto" id="erroremailreal">
             E-mail no parece estar bien escrito.
           </div>
        <!-- /.Validacion --> 
EL JAVASCRIPT DE VALIDACIÓN
Código:
// JavaScript Document
function validarEmail( email ) {
    expr = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if ( !expr.test(email) )
        return false;
else return true;
}
//////////////////////////////////////////////////////////////////////
function validarusuarioalta()
{
    valid = true;
    $("#errorE-mail").hide("slow");
    if (document.forminsertar.strEmail.value == ""){
        $("#errorE-mail").show("slow");
        valid = false;
    }
    $("#erroremailreal").hide("slow");
    if (!validarEmail(document.forminsertar.strEmail.value)){
        $("#erroremailreal").show("slow");
        valid = false;
    }
    $("#errorPassword").hide("slow");
    if (document.forminsertar.strPassword.value == ""){
        $("#errorPassword").show("slow");
        valid = false;
    }
    $("#errorNombre").hide("slow");
    if (document.forminsertar.strNombre.value == ""){
        $("#errorNombre").show("slow");
        valid = false;
    }
    return valid;
}
El problema que tengo es que si no relleno el campo E.mail, me salen los dos errores a la ves, que está vacio y que no es E-mail. Me han comentado que con un if(), pero no lo veo, de javascript no controlo mucho.
Gracias de antemano
  #2 (permalink)  
Antiguo 03/04/2017, 14:43
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Javscript errores formulario e-mail

No es una cuestión de conocer o no el lenguaje sino de lógica. Utiliza una condición en la cual evalúes el campo del correo electrónico. Si posee contenido, procedes a evaluar el formato de la dirección electrónica proporcionada, utilizando una segunda condición. Teniendo esto así, los mensajes de error los podrás mostrar según el ámbito de la condición:
Código Pesudocódigo:
Ver original
  1. SI condición 1 ENTONCES
  2.     SI condición 2 ENTONCES
  3.         Instrucciones
  4.     SI NO
  5.         Error de condición 2
  6.     FIN SI
  7. SI NO
  8.     Error de condición 1
  9. FIN SI

No tendría sentido evaluar el formato del contenido del campo del correo electrónico si no se ha proporcionado un valor.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 04/04/2017, 02:08
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Respuesta: Javscript errores formulario e-mail

En primer lugar, gracias por haber contestado.
Lo intentaré, pero te digo que no controlo los condicionales con javascript.
Ya te diré.
lo dicho, muchas gracias.
  #4 (permalink)  
Antiguo 04/04/2017, 08:02
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Respuesta: Javscript errores formulario e-mail

Alexis88, mi hermano, no lo veo, ¿podrías ayudarme?.
Muchas gracias de antemano.
  #5 (permalink)  
Antiguo 05/04/2017, 11:53
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Javscript errores formulario e-mail

Sería algo como esto:
Código Javascript:
Ver original
  1. var emailInput = document.forminsertar.strEmail;
  2.  
  3. //Si el campo de texto del e-mail posee contenido
  4. if (emailInput.value.length){
  5.     //Se evalúa su formato. Si no es válido, se muestra el mensaje de error respectivo
  6.     if (!validarEmail(emailInput.value)){
  7.         $("#erroremailreal").show("slow");
  8.         valid = false;
  9.     }
  10. }
  11. //Si el campo de texto del e-mail no posee contenido
  12. else{
  13.     //Se muestra el mensaje de error respectivo
  14.     $("#errorE-mail").show("slow");
  15.     valid = false;
  16. }

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 07/04/2017, 08:24
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Respuesta: Javscript errores formulario e-mail

Si no meto nada, correcto sale el mensasa es campo obligatorio.
Si meto algo, sale el mensaje de que es obligatorio y de que no es e-mail, debería salir solo de que no es e-mail pues ya hay algo metido.
Código PHP:
// JavaScript Document
function validarEmailemail ) {
    
expr = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
    if ( !
expr.test(email) )
        return 
false;
else return 
true;
}

function 
validarusuarioalta()
{
    
valid true;
     var 
emailInput document.forminsertar.strEmail;
     
    
//Si el campo de texto del e-mail posee contenido
    
if (emailInput.value.length){
        
//Se evalúa su formato. Si no es válido, se muestra el mensaje de error respectivo
        
if (!validarEmail(emailInput.value)){
            $(
"#erroremailreal").show("slow");
            
valid false;
        }
    }
    
//Si el campo de texto del e-mail no posee contenido
    
else{
        
//Se muestra el mensaje de error respectivo
        
$("#errorE-mail").show("slow");
        
valid false;
    }
    
    $(
"#errorPassword").hide("slow");
    if (
document.forminsertar.strPassword.value == ""){
        $(
"#errorPassword").show("slow");
        
valid false;
    }
    $(
"#errorNombre").hide("slow");
    if (
document.forminsertar.strNombre.value == ""){
        $(
"#errorNombre").show("slow");
        
valid false;
    }
    return 
valid;

Muchísimas gracias por tu respuesta.
  #7 (permalink)  
Antiguo 07/04/2017, 10:08
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 9 meses
Puntos: 39
Respuesta: Javscript errores formulario e-mail

Intentaré echarte una mano para que entiendas mejor el javascript
Código Javascript:
Ver original
  1. // JavaScript Document
  2. function validarEmail( email ) {
  3.     expr = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
  4.     if ( !expr.test(email) )
  5.         return false;
  6.     else
  7.         return true;
  8. }
  9.  
  10. function validarusuarioalta() {
  11.     const emailInput = document.forminsertar.strEmail;
  12.      
  13.     //Si el campo de texto del e-mail no posee contenido
  14.  
  15.     if ( !emailInput.value ){
  16.         $( "#errorE-mail" ).show( "slow" );
  17.         return false; // Detenemos la función en este punto
  18.     }
  19.  
  20.     //Se evalúa su formato. Si no es válido, se muestra el mensaje de error respectivo
  21.  
  22.     if ( !validarEmail( emailInput.value )){
  23.         $( "#erroremailreal" ).show( "slow" );
  24.         return false; // Esto detiene la función en este punto
  25.     }
  26.    
  27.     $( "#errorPassword" ).hide( "slow" );
  28.     if ( !document.forminsertar.strPassword.value ){
  29.         $( "#errorPassword" ).show( "slow" );
  30.         return false; // Esto detiene la función en este punto
  31.     }
  32.  
  33.     $("#errorNombre").hide("slow");
  34.     if ( !document.forminsertar.strNombre.value ){
  35.         $("#errorNombre").show("slow");
  36.         return false; // Esto detiene la función en este punto
  37.     }
  38.  
  39.     return true;
  40. }

A lo mejor así lo ves un poco más claro en principio debería funcionarte siempre que la expresión regular con la que validas el email sea correcta ( no me he parado a comprobarla) . Como puedes comprobar he prescindido de la variable "valid" y retornas false o true en función de que sea correcta la validación o no.

En javascript es conveniente definir las variables dentro de cada función, si no éstas se comportarán como variables globales y podrás tener errores en tu código. Con ECMA 6 hay tres formas de definir las variables. var, const, let.


var - Define variables normales con un scope dentro de la función donde se haya definido.

const - Define variables constantes con un scope dentro de la función o el bloque donde se haya definido. En lo que refiere al scope se comporta igual que var solo que éstas no se pueden modificar a no ser que sean objetos.

let - Define variables normales con un scope dentro de un bloque que puede ser un if o un for por ejemplo. Si defines una variable con let dentro de un bloque if, esta variable no estará disponible fuera del bloque.

Como consejo acostúmbrate a definir las variables.

Otro consejo cuando compares si algo es igual a algo, en javascript lo ideal es usar tres signos de igual ( === ).
__________________
Diseño Web - Arisman Web
  #8 (permalink)  
Antiguo 07/04/2017, 10:23
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 9 meses
Puntos: 39
Respuesta: Javscript errores formulario e-mail

Otra cosa que podrías hacer es ahorrarte todas esas divisiones de validación por una sola y ordenar un poco tu código.

Código HTML:
Ver original
  1. <div class="form-group">
  2.     <label>E-mail</label><input name="strEmail" class="form-control" placeholder="e-mail">
  3. </div>
  4. <!-- Validacion -->
  5. <div class="alert alert-danger oculto" id="error"></div>

Código Javascript:
Ver original
  1. // JavaScript Document
  2. function validarEmail( email ) {
  3.     expr = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
  4.     if ( !expr.test(email) )
  5.         return false;
  6.     else
  7.         return true;
  8. }
  9.  
  10. function validarusuarioalta() {
  11.     const email = $("input[name=strEmail]").val();
  12.     const pass = $("input[name=strPassword]").val();
  13.     const name = $("input[name=strNombre]").val();
  14.  
  15.     // Ocultamos el div del error
  16.  
  17.     $("#error").hide("slow");
  18.      
  19.     //Si el campo de texto del e-mail no posee contenido
  20.  
  21.     if ( !email ){
  22.         $( "#error" ).html( "Por favor introduce un correo electrónico." );
  23.         $( "#error" ).show( "slow" );
  24.         return false; // Detenemos la función en este punto
  25.     }
  26.  
  27.     //Se evalúa su formato. Si no es válido, se muestra el mensaje de error respectivo
  28.  
  29.     if ( !validarEmail( email )){
  30.         $( "#error" ).html( "El correo electrónico introducido no es correcto." );
  31.         $( "#error" ).show( "slow" );
  32.         return false; // Esto detiene la función en este punto
  33.     }
  34.    
  35.     if ( !pass ){
  36.         $( "#error" ).html( "Por favor introduce una contraseña." );
  37.         $( "#error" ).show( "slow" );
  38.         return false; // Esto detiene la función en este punto
  39.     }
  40.  
  41.     if ( !name ){
  42.         $( "#error" ).html( "Por favor introduce tu nombre." );
  43.         $("#error").show("slow");
  44.         return false; // Esto detiene la función en este punto
  45.     }
  46.  
  47.     return true;
  48. }
__________________
Diseño Web - Arisman Web
  #9 (permalink)  
Antiguo 07/04/2017, 23:19
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Javscript errores formulario e-mail

Estimado Manu:

Hay un problema con tu forma de validar. En el caso de que no se cumpliera la primera condición, solo se mostraría el mensaje de error de dicho campo, mas no el de los demás (el return false impediría que se evalúen las demás condiciones), y creo que, lo que busca hacer manyblue, es mostrar todos pero tratando de evitar que se muestren los dos mensajes de error asociados al campo del correo electrónico según sea el caso.

Por cierto, la igualdad estricta no es que se trate precisamente de la manera "ideal" de comprobar la igualdad entre dos valores; todo depende de la situación y contexto. Por lo demás, buenas recomendaciones orientadas al estándar ECMA-262.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 07/04/2017 a las 23:37 Razón: Gramática
  #10 (permalink)  
Antiguo 07/04/2017, 23:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Javscript errores formulario e-mail

Cita:
Iniciado por manyblue Ver Mensaje
[...] Si meto algo, sale el mensaje de que es obligatorio y de que no es e-mail, debería salir solo de que no es e-mail pues ya hay algo metido [...]
Según el código que muestras en tu último mensaje, eso ya no debería suceder. Incluso lo he probado y funciona como está previsto. Si sigue suscitándose el problema, puede ser: problema de caché del navegador o quizá hay otro bloque de código que no estamos viendo que esté generando el inconveniente.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 08/04/2017, 16:47
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Respuesta: Javscript errores formulario e-mail

Muchísimas gracias, lo miro con calma pues mi intención no es solo copiar y pegar si no también entender que es lo más importante para mi. Lo dicho, muchísimas gracias.
  #12 (permalink)  
Antiguo 04/05/2017, 12:07
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Respuesta: Javscript errores formulario e-mail

Código Java:
Ver original
  1. var emailInput = document.forminsertar.strEmail;
  2.      
  3.     //Si el campo de texto del e-mail posee contenido
  4.     if (emailInput.value.length){
  5.         //Se evalúa su formato. Si no es válido, se muestra el mensaje de error respectivo
  6.         if (!validarEmail(emailInput.value)){
  7.             $("#erroremailreal").show("slow");
  8.             valid = false;
  9.         }
  10.     }
  11.     //Si el campo de texto del e-mail no posee contenido
  12.     else{
  13.         //Se muestra el mensaje de error respectivo
  14.         $("#errorE-mail").show("slow");
  15.         valid = false;
  16.     }
Alexis88 tu código funcionó perfectamente y he entendido perfectamente lo que has hecho, muchísimas gracias por tu aporte, tieneS unas cervecitas pagadas si vienes por canarias y perdona por no haber contestado antes. El problema fué, como me digistes, limpiar de cookies etc el navegardor. Lo bueno es que mirándolo he aprendido para otras veces.
Saludos Manyblue

Etiquetas: e-mail, errores, formulario, input
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:36.