0

好的,所以我有表单验证函数。该函数通过表单验证函数运行,如果字段无效,则返回 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;
    }
}
4

1 回答 1

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属性,因为用户可能会再次提交表单,而您可能希望在这种情况下执行另一次验证。

于 2012-12-08T02:28:51.170 回答