【发布时间】:2014-11-13 06:53:15
【问题描述】:
我有一个字段,用户可以在其中提交由逗号分隔的多封电子邮件。我希望 JS 验证实现两件事:
- 如果用户尝试不提交任何内容,他们会收到一个提醒,提示他们必须输入电子邮件,这可行
- 如果用户尝试提交任意数量的电子邮件,其中一封电子邮件格式不正确,他们会收到一封电子邮件格式不正确的警报,并且他们必须重新提交,这不起作用
#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