2014-09-18 1 views
0

J'ai un champ dans lequel un utilisateur peut soumettre plusieurs e-mails délimités par une virgule. Je veux la validation JS pour obtenir deux choses:La validation d'e-mail JS soumet toujours des e-mails non valides

  1. Si l'utilisateur tente de rien soumettre, ils obtiennent une alerte qu'ils doivent entrer dans un e-mail, cela fonctionne
  2. Si l'utilisateur tente d'envoyer un certain nombre d'e-mails où un e-mail est correctement formaté, ils obtiennent une alerte qu'un email a été mal formaté, et ils doivent soumettre à nouveau, ce NE FONCTIONNE PAS

Qu'est-ce qui se passe aveC# 2 est que si je soumets quelque chose de faux comme asddf comme un e-mail , I:

  • Recevez l'alerte!
  • Cependant, le formulaire est encore soumis, BOO

code:

$("#refer").click(function() { 
    var input_emails = $('#friend_emails').val(); 
    if (input_emails === "") { 
    alert("Please enter at least one friend's email to send invites") 
    return false; 
    } else { 
    var parsed_emails = input_emails.split(','); 
    $.each(parsed_emails, function(index, email_value) { 
     var trimmed_email = $.trim(email_value) 
     var atpos = trimmed_email.indexOf("@"); 
     var dotpos = trimmed_email.lastIndexOf("."); 
     if (atpos< 1 || dotpos<atpos+2 || dotpos+2>=trimmed_email.length) { 
     alert(trimmed_email + " " + "is not a valid email format, please correct and resubmit"); 
     return false; 
     } 
    }); 
    } 
}); 
+0

Pour le second cas, vous ne bloquez pas le comportement par défaut de l'événement 'click' dans le cas d'un e-mail valide. –

+1

t.niese a raison. Ajoutez 'e' comme argument à la fonction de clic anonyme. Dans votre code, utilisez 'e.preventDefault()' au lieu de 'return false'. Lisez les documents: http://api.jquery.com/event.preventdefault/ – Bjorn

+0

@Bjorn ce n'est pas correct, 'return false' inclut' e.preventDefault() 'par ce post: http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false. Et j'ai déjà essayé cette solution, cela ne fonctionnait pas – james

Répondre

0

le retour dans votre $.each(... est de retour de la fonction interne. vous avez besoin d'un moyen de retourner faux de votre fonction extérieure. quelque chose comme ça

 
$("#refer").click(function() { 
    var input_emails = $('#friend_emails').val(); 
    if (input_emails === "") { 
    alert("Please enter at least one friend's email to send invites") 
    return false; 
    } else { 
    var success = true; 
    var parsed_emails = input_emails.split(','); 
    $.each(parsed_emails, function(index, email_value) { 
     var trimmed_email = $.trim(email_value) 
     var atpos = trimmed_email.indexOf("@"); 
     var dotpos = trimmed_email.lastIndexOf("."); 
     if (atpos< 1 || dotpos=trimmed_email.length) { 
     alert(trimmed_email + " " + "is not a valid email format, please correct and resubmit"); 
     success = false; 
     } 
    }); 
    return success; 
    }
});

Questions connexes