在validateUsername函数之前提交表单的问题有可能在服务器端完成用户名检查。
如何在validateUsername函数完成后提交表单? 希望这很清楚......
form.submit(function(){
if (validateUsername() & validateEmail() & validatePassword()) {
return true;
} else {
return false;
}
});
function validateUsername(){
usernameInfo.addClass("sign_up_drill");
usernameInfo.text("checking...");
var b = username.val();
var filter = /^[a-zA-Z0-9_]+$/;
$.post("../username_check.php",{su_username:username.val()},function(data) {
if (data=='yes') {
username.addClass("error");
usernameInfo.text("sorry, that one's taken");
usernameInfo.addClass("error");
return false;
} else if (!filter.test(b)) {
username.addClass("error");
usernameInfo.text("no funny characters please");
usernameInfo.addClass("error");
return false;
} else {
username.removeClass("error");
usernameInfo.text("ok");
usernameInfo.removeClass("error");
return true;
}
});
}
答案 0 :(得分:8)
Olafur答案的更详细版本 - 进行了AJAX调用,函数返回时无需等待。
在您提交表单之前,回调无法完成。
你应该做的是让按钮/触发器调用AJAX验证,回调应该提交表单而不是返回true。
答案 1 :(得分:2)
jQuery form validation plugin会为您解决此问题 - 我强烈推荐它。
一些示例代码:
$("#myform").validate({
rules: {
email: {
required: true,
email: true
},
username: {
required: true,
remote: {
url: "../username_check.php",
type: "post",
}
}
}
}
});
答案 2 :(得分:1)
在jQuery中有一个相同的解决方案。在某些JavaScript期间,我需要检查我的应用程序中是否存在用户。这是代码:
var pars = "username="+ username;
var some = $.ajax({url: 'AjaxUserNameExist.php',
type: 'GET',
data: pars,
async: false
}).responseText;
if(some=="1") //this is value Got from PHP
{
alert("We cannot Go");
return false;
}
if(some=="0")
{
alert("We can Go");
return true;
}
答案 3 :(得分:1)
我最近处理过类似的问题。在某些情况下,在输入字段上按Enter可能会使表单提交。我试图通过多种方式解决这个问题,然后更改所需的规范,以便按Enter键或设备上的Go,将允许表单提交。我的解决方案当时对我来说是有意义的。
var form_submit = false;
function validateInput () {
var field_value = $('#username').val();
$.post('validation.php', {'input': field_value }, function (d) {
if (d.valid) {
form_submit = true;
$('form').submit();
} else {
//error message or whatever
}
}, 'json');
}
$('form').submit( function () {
if ( form_submit ) {
return true;
} else {
validateInput();
return false;
}
});
答案 4 :(得分:0)
您无法在AJAX通话中返回。我建议你阅读jQuery FAQ的this section。特别是关于回调的部分。 (最后一个代码段)
答案 5 :(得分:-1)
我建议
1)表格中隐藏的字段 2)在调用任何发出AJAX请求的函数之前,将其值设置为0 3)当每个功能成功验证时增加值 4)在检查此隐藏字段的值之前,设置一些秒数(即完成所有AJAX请求所花费的时间/超时时间+几秒)。 检查值是否为3(如果有3个AJAX调用进行验证),然后让它提交。
我想,当控件失去焦点时进行验证会更好。仅当所有控件都通过验证时才启用提交按钮。
抱歉,我对JQuery不太熟悉,但如果我使用普通的javascript,我会这样做。
答案 6 :(得分:-1)
为什么在收到ajax后端的结果后才使用$('#yourFormId').submit();
?