JS电子邮件验证仍然提交无效的电子邮件

时间:2014-09-18 19:39:06

标签: javascript jquery validation email-validation

我有一个字段,用户可以在其中提交由逗号字符分隔的多个电子邮件。我希望JS验证能够实现两件事:

  1. 如果用户尝试不提交任何内容,他们会收到提醒,他们必须输入电子邮件,此工作
  2. 如果用户尝试提交任意数量的电子邮件,其中一封电子邮件格式不正确,他们会收到一封电子邮件格式不正确的提醒,他们必须重新提交,这不会有效
  3. #2会发生什么事情,如果我将asddf这样的虚假信息作为电子邮件提交,我:

    • 直接得到警报!
    • 然而,表格仍然提交,BOO

    代码:

    $("#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;
          }
        });
      }  
    });
    

1 个答案:

答案 0 :(得分:0)

你的$.each(...的回复是从内部函数返回的。你需要一种从外部函数返回false的方法。像这样的东西

$("#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;
  }
});