Jquery验证Ajax没有重新验证

时间:2016-08-22 22:27:12

标签: jquery ajax validation

我发现了这个其他链接 jQuery validate + AJAX e-mail availiability check

提问者显示他们想要在成功时执行某些操作但是在更改您的值并再次标记后该字段将不会重新生效。

用户Blowhard博士说,因为他们正在覆盖远程方法的成功回调。但他没有举例说明如何处理。相反,他有一个与验证选项绑定的SubmitHandler。那么如何做一些事情然后返回真或假?例如,如果我找到了电子邮件地址,我会返回一些我已经存档的数据并禁用这些表单字段。

$("#userForm").validate({
onfocusout: function (element) {
    this.element(element);
},
onkeyup: false,
rules: {
    email: {
        required: true,
        email: true,
        remote: {
            url: 'ajax/checkEmail.php',
            type: 'post',
            data: {
                email: function() {
                    return $('#email').val();
                }
            },
            success: function(data) {
                if(data.status == 1) {
                    $('#affcode').val(data.affCode).attr("disabled", true);
                    $('#userID').val(data.userID);
                    $('#password, #password2').attr("disabled", true);
                    return true;
                } else {
                    $('#password, #password2, #affcode').removeAttr("disabled");
                    return true;
                }
            }
        }
    },
messages: {
    affcode: {
        required: "Please enter a custom affiliate code.",
        regx: "Affiliate codes must start with a LETTER."
    }
}
});

我的PHP是这样的:

$res = PDOWrapper::instance()->select('accounts', array("email" => $_REQUEST['email']));

if(count($res) > 0) {
    $return['status'] = 1;
    $return['affCode'] = $res[0]['affCode'];
    $return['userID'] = $res[0]['aKey'];
} else {
    $return['status'] = 0;
}


echo json_encode($return);

1 个答案:

答案 0 :(得分:0)

最好的方法是创建自定义规则。在 addMethod 之前添加 var response; 非常重要。你只需申报一次。

var response;
$.validator.addMethod(
    "checkAffiliate", 
    function(value, element) {          
        $.ajax({
            type: "POST",
            url: "ajax/checkAffiliate.php",
            data: {
                    email: function() {
                        return $('#email').val();
                    },
                        affcode: function() {
                        return $('#affcode').val();
                    },
            },
            dataType: 'json',
            success: function(data)
            {
                if(data.status == 0) {
                    response = false;
                } else {
                    //Do some stuff here
                    response = true;
                }          
            },
            async: false
        });
        return response;
    },
    "Affiliate Code is already in use."
);