我有一个配置文件创建表单,其中包含一个电子邮件地址字段。我需要确保用户输入的电子邮件地址格式有效,并且它还没有被使用。对于格式检查,我有一个简单的客户端验证由isValidEmailAddress函数执行,该函数运行良好。对于我需要检查电子邮件地址是否已经存在的其他部分,我对控制器方法执行jquery发布,该方法返回一个字符串"已经在使用的电子邮件地址"如果电子邮件已被某人使用..但在第一个"下面的代码中,则返回false"并没有阻止表单提交。这是一个jquery异步的东西吗?
$(document).ready(function(){
$("#new_profile").submit(function(){
var email = $("#user_email").val();
if(isValidEmailAddress(email)){
jQuery.post('/profiles/validate_email', {email: email}, function(data){
if(data.match(/in use/)){
$(".email-check-message").html(data);
return false;
}
});
}
else{
$(".email-check-message").html('please enter a valid email address');
return false;
}
});
});
此外,上述功能中的jquery帖子似乎没有工作......因为我没有看到服务器日志中发生的服务器调用。任何人都知道发生了什么?感谢。
答案 0 :(得分:2)
可以提供不同的解决方案。
首先使用您的函数检查邮件后将其发送到php,控制的asp文件已经在使用。
$("#new_profile").submit(function(event){
var email = $("#user_email").val();
if(isValidEmailAddress(email)){
$.post(
'control.php?do=mail',
{mail:email},
function(answer){
//做一些回答
}
);
});
} else{
$(".email-check-message").html('please enter a valid email address');
return false;
}
答案 1 :(得分:2)
只需使用:
$(document).ready(function(){
$("#new_profile").submit(function(event){
var email = $("#user_email").val();
if(isValidEmailAddress(email)){
jQuery.post('/profiles/validate_email', {email: email}, function(data){
if(data.match(/in use/)){
$(".email-check-message").html(data);
event.preventDefault();
}
});
}
else{
$(".email-check-message").html('please enter a valid email address');
}
});
});
答案 2 :(得分:0)
尝试:
$(document).ready(function(){
$("#new_profile").submit(function(event){
var email = $("#user_email").val();
if(isValidEmailAddress(email)){
jQuery.post('/profiles/validate_email', {email: email}, function(data){
if(data.match(/in use/)){
$(".email-check-message").html(data);
event.preventDefault();
}
});
}
else{
$(".email-check-message").html('please enter a valid email address');
event.preventDefault();
}
});
});
答案 3 :(得分:0)
答案 4 :(得分:0)
您必须无条件取消提交,因为提交处理程序将在ajax请求返回之前完成执行(除非您将async设置为false),因此您无法阻止已经发生的操作。您可以设置一个标志以指示电子邮件是否有效,然后提交表单
$(document).ready(function(){
$("#new_profile").submit(function(e){
if (!$('#new_profile').data('validemail')){
e.preventDefault();
var email = $("#user_email").val();
if(isValidEmailAddress(email)){
jQuery.post('/profiles/validate_email', {email: email}, function(data){
if(data.match(/in use/)){
$(".email-check-message").html(data);
}
else{
$('#new_profile').data('validemail', true).submit();
}
});
}
else{
$(".email-check-message").html('please enter a valid email address');
}
}
});
});