这是我的jquery代码:
$(document).ready(function() {
$("#register").submit(function (event) {
var email = $('#email-agency').val();
/* EMAIL VALIDATION */
if (email == ""){
$('#email-agency').css({"border-color":"#3399ff"});
$('#email-err').html("You must enter your e-mail address.").removeClass("success_msg").addClass("error_msg");
}else{
$('#email-err').html("<img src='http://www.site.com/folder/ajax-loader.gif' /> Validating the e-mail address...").removeClass("success_msg").removeClass("error_msg");
$.get('http://www.site.com/folder/email.php',{id: email}, function(result){
if (result == "invalid format"){
$('#email-agency').css({"border-color":"#3399ff"});
$('#email-err').html(email + " is not a valid e-mail address.").removeClass("success_msg").addClass("error_msg");
event.preventDefault();
return false;
}else if (result == "taken"){
$('#email-agency').css({"border-color":"#3399ff"});
$('#email-err').html("I'm sorry, this e-mail address is already taken.").removeClass("success_msg").addClass("error_msg");
event.preventDefault();
return false;
}else if (result == "available"){
$('#email-agency').css({"border-color":"#1f6d21"});
$('#email-err').html("Congratulations, this e-mail address is available.").removeClass("error_msg").addClass("success_msg");
return true;
}
})
}
});
出于某种原因,如果电子邮件地址被(result == "taken")
- 表格仍然提交。
我做错了什么?如果收到电子邮件地址,我怎么能不提交表格?
谢谢
答案 0 :(得分:2)
这是因为您要从false
而不是$.get(function()
$("#register").submit(function()
因为您的AJAX调用是异步的,所以也无法使用AJAX调用的返回值设置变量。
因为该函数已经完成,而AJAX调用可能仍在进行中。
您可以使用:
async: false
而不是返回false / true do:
var valid = false; //在提交功能的顶部
而不是返回do:valid = true;
//或false
在提交功能结束时执行:
return valid;
修改强>
对不起。
通过查看.get()
的文档,看起来.get()
不会采用异步参数。
您可以改用.ajax()
功能。 (get是ajax的简写)。
http://api.jquery.com/jQuery.ajax/
<强> EDIT2 强>
$(document).ready(function() {
$("#register").submit(function (event) {
var valid = false;
var email = $('#email-agency').val();
if (email == ""){
$('#email-agency').css({"border-color":"#3399ff"});
$('#email-err').html("You must enter your e-mail address.").removeClass("success_msg").addClass("error_msg");
}else{
$('#email-err').html("<img src='http://www.site.com/folder/ajax-loader.gif' /> Validating the e-mail address...").removeClass("success_msg").removeClass("error_msg");
$.get('http://www.site.com/folder/email.php',{id: email}, function(result){
if (result == "invalid format"){
$('#email-agency').css({"border-color":"#3399ff"});
$('#email-err').html(email + " is not a valid e-mail address.").removeClass("success_msg").addClass("error_msg");
event.preventDefault();
valid false;
}else if (result == "taken"){
$('#email-agency').css({"border-color":"#3399ff"});
$('#email-err').html("I'm sorry, this e-mail address is already taken.").removeClass("success_msg").addClass("error_msg");
event.preventDefault();
valid false;
}else if (result == "available"){
$('#email-agency').css({"border-color":"#1f6d21"});
$('#email-err').html("Congratulations, this e-mail address is available.").removeClass("error_msg").addClass("success_msg");
valid true;
}
})
}
return valid;
});
});
答案 1 :(得分:1)
您正在进行异步调用,这意味着您的第一个函数将返回。相反,如果你想这样做,你应该做的就是在第一次调用时返回false。然后根据第二个电话的答案你可以调用$(“form”)。submit()或显示错误。现在你将false返回到AJAX回调中。
基本上你想要这样做:
function validate(e){
e.preventDefault(); //Stop form from submitting
$.get(/*foo*/, function(response){
if( response ){ //yay validates
$("form").submit();
}else{ //Doesn't validate show error.
$("form .error").show();
}
});
}
答案 2 :(得分:0)
只是做:
return $.get('http://www.site.com/folder/email.php',{id: email}, function(result){
//more code
}