【问题标题】:JS email validation still submits invalid emailsJS 邮件验证仍然提交无效邮件
【发布时间】:2014-11-13 06:53:15
【问题描述】:

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

  1. 如果用户尝试不提交任何内容,他们会收到一个提醒,提示他们必须输入电子邮件,这可行
  2. 如果用户尝试提交任意数量的电子邮件,其中一封电子邮件格式不正确,他们会收到一封电子邮件格式不正确的警报,并且他们必须重新提交,这不起作用

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

【问题讨论】:

  • 对于第二种情况,您不会阻止click事件在无效电子邮件的情况下的默认行为。
  • t.niese 是对的。添加e 作为匿名点击函数的参数。然后在您的代码中,使用e.preventDefault() 而不是return false。阅读文档:api.jquery.com/event.preventdefault
  • @Bjorn 不对,return false 包括 e.preventDefault() 每个帖子:stackoverflow.com/questions/1357118/…。我已经尝试过这个解决方案,没有用
  • @james:Bjorn 并没有说从回调方法返回 false 不包括 preventDefault,但是当您将 return false 放在迭代回调中时,它没有意义取消活动。您要么需要将 return 语句从 hair raisin 建议之类的迭代回调中移出,要么您需要使用 preventDefault() 两者应该工作相同。如果e.preventDefault()不起作用,那么你很可能做错了什么或者你还需要添加e.stopPropagation()。

标签: javascript jquery validation email-validation


【解决方案1】:

$.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;
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2021-10-04
    • 2012-08-03
    • 2014-07-06
    • 2013-05-04
    • 1970-01-01
    • 2020-01-31
    • 2023-04-10
    相关资源
    最近更新 更多