在jquery验证中添加远程规则

时间:2014-09-18 07:12:24

标签: jquery ajax validation backbone.js

我尝试使用jquery验证远程处理规则验证我的注册表单的email字段。

以下是我尝试的内容:

$.validator.addMethod("isAlrdExist", function(value, element)
    {
        var inputElem = $('#registerForm :input[name="email"]'),
                data = { "email" : inputElem.val() },
                eReport = ''; //error report
        $.ajax(
                {
                    type: "GET",
                    url: getURL() + WebConfig.RACustomer + "?$filter=WebAccount eq '" + $("#email").val() + "'",
                    dataType: "json",
                    success: function(res)
                    {
                        if (res.length != 0)
                        {
                            return '<p>This email address is already registered.</p>';
                        }
                        else
                        {
                            return true;
                        }
                    },
                    error: function(xhr, textStatus, errorThrown)
                    {
                        return false;
                    }
                });

    }, '');


    $("#registerForm").validate({
        onkeyup: false,
        rules: {
            email: {
                isAlrdExist: true
            }
        }
    });

问题:当我执行console.log($("#registerForm").valid());时,单击“注册”按钮,数据库中甚至还不存在email,但结果为false。< / p>

知道可能导致这种情况的原因。

1 个答案:

答案 0 :(得分:0)

你可以将你想要的所有东西都塞进默认的remote规则中,但并不是100%明确,但值得一试。

$('#registerForm').validate({
    rules: {
        email: {
            remote: {
                url:getURL() + WebConfig.RACustomer,  //will only work if this is static relative to the form
                data: {
                    "email" : function(){
                         return $('#registerForm input[name="email"]').val();
                     },
                     "$filter" : function() {
                         return "WebAccount eq '"+$('#email').val()+"'"
                     }
                },
                dataType:'html',
                type:'GET',
                //fiddle with the data here to ultimately return an error message or true
                dataFilter:function(data){
                   if (data.length != 0){
                       return '<p>This email address is already registered.</p>';
                   }else{
                       return true;
                   }
                }
            }
        }
    }
});

我在这里做了一个工作示例:http://jsfiddle.net/ryleyb/fhpr52ca/