好吧我有表单验证功能。该函数运行表单验证函数,如果该字段无效,则返回false。
问题是当它到达使用ajax检查字段是否有效的函数时。
由于某种原因,它似乎没有“等待”ajax返回并自动返回false。
有办法解决这个问题吗?
以下是代码:
function form_validation(){
if (!NewValidationForm('pcode', 'Please fill in all the fields'))
return false;
if (!NewValidationForm('fname', 'Please fill in all the fields'))
return false;
if(!validate_coupon()){
alert("bad!!");
return false;
}
return true;
}
function validate_coupon(){
var url = $j("#site_url").val() + 'ajax_functions.php';
var coupon = $j("#pcode").val();
var result_status = false; // seem its jumps from here to:
$j.ajax({
type: "POST",
url: url,
data: { ajax: 'ajax', coupon: coupon}
}).success(function(insertID){
var obj = $j.parseJSON(insertID);
if(obj.status == 1){
result_status = true;
}
});
// straight over here
if(result_status == true){
return true;
}
}
答案 0 :(得分:0)
通常在这种情况下我会在$(document).ready()
中执行类似的操作:
$('form').submit(function (evt) {
if (!$(this).attr('data-submitted')) {
evt.preventDefault();
$(this).attr('data-submitted', 'true');
// call your form validation code here that fires the ajax request
return false;
}
return true;
});
然后,在您的$.ajax
回调中,验证完成后,请致电$('form').submit()
。这有效地使用表单上的属性作为验证请求状态的标志。当用户首次提交表单时,将设置标志并开始验证过程。验证完成后,将触发表单的提交事件,并且自设置该标志以来,此时表单将像平常一样提交。
如果这种方法适合你,你可能想要添加一点点润色。例如,您可能希望在调用$.ajax
之前禁用提交按钮,并在验证失败时再次启用它。如果验证失败,您可能还希望从表单中删除data-submitted
属性,因为用户可能第二次提交表单,并且您可能希望在这种情况下执行另一次验证。