即使返回true,Jquery Validate也会在电子邮件验证时返回false

时间:2011-04-28 07:25:15

标签: jquery ajax jquery-validate validation

我知道有些帖子几乎和我看过的很多帖子一样,很遗憾没有找到解决方案。我的问题是我使用jquery的.addmethod()函数向jquery验证插件编写了一个电子邮件valiadtor。

$.validator.addMethod("uniqueEmail", function(value, element) {
    $.ajax({
        data: 'email=' + value,
        type: 'get',
        url: 'functions/emailcheck.php',
            dataType:"html",
            success: function(msg) {
                alert("M:"+msg+"   V:"+value);
                if(msg == true || msg != null || msg == "true"){
                    return true;
                    alert("TRUE!!!");
                }
                else{
                    return false;
                }
            }
        });
    });

然后在验证规则中......

email: { required: true, email: true, uniqueEmail: true },

然后最后甚至在使用这个php文件....

<?php
    echo "true";
?>

它给我警告已经注册,并在电子邮件下发送消息.. uniqueEmail: jQuery.format("{0} has already been registered")。现在我在ajax调用中设置了调试警报。它显示它返回true,并且值是输入的。

我希望得到一些帮助,这让我感到疯狂,我觉得这对你们中的一些人来说很明显!

PS 继承了我的完整验证减去上面的额外方法...

$( ".form_registration_submit" ).click(function() {
        $(".qtip").remove();
        $("#form_registration").validate({
            onfocusout: function(element){
                $(".qtip").remove();
            },
            rules: {
                name: {
                    required: true,
                    minlength: 3
                },
                firstname: {
                    required: true,
                    minlength: 3
                },
                lastname: {
                    required: true,
                    minlength: 3
                },
                username: {
                    required: true,
                    minlength: 3
                },
                password: {
                    required: true,
                    minlength: 5
                },
                confirm_password: {
                    required: true,
                    minlength: 5,
                    equalTo: "#form_registration_password"
                },
                email: {
                    required: true,
                    email: true,
                    uniqueEmail: true
                },
                topic: {
                    required: "#newsletter:checked",
                    minlength: 2
                },
                agree: "required"
            },
            messages: {
                name: "Please enter your name",
                firstname: "Please enter your firstname",
                lastname: "Please enter your lastname",
                username: {
                    required: "Please enter a username",
                    minlength: "Your username must consist of at least 2 characters"
                },
                password: {
                    required: "Please provide a password",
                    minlength: "Your password must be at least 5 characters long"
                },
                confirm_password: {
                    required: "Please confirm your password",
                    minlength: "Your password must be at least 5 characters long",
                    equalTo: "Please enter the same password as above"
                },
                email: {
                    required: "Please enter a valid email address",
                    uniqueEmail: jQuery.format("{0} has already been registered")
                },
                agree: "Please accept our policy"
            },
             errorPlacement: function(error, element) {
              element.qtip(
                  {
                      show: { solo: false, ready: true, delay: 0 },
                      hide: { when:false },
                      content: eval(error),
                      style: { name: 'dark', border: { width: 1, radius: 1, color:"red" }, tip: 'bottomLeft' },
                      position: {
                          corner: { target: 'topRight', tooltip: 'bottomLeft' },
                          adjust: { x: 0 , y: 0 }
                      }
                  });
            },
            submitHandler: function(form) {
                $(".qtip").remove();
                jQuery(form).ajaxSubmit({
                    target: "#login_result"
                });
            }
        }); 
    });

3 个答案:

答案 0 :(得分:3)

您的验证函数实际上并未返回任何值,因此评估为false。默认情况下,.ajax()请求是异步的,这意味着验证函数在有可能执行成功回调之前结束。

此问题与.post inside jQuery.validator.addMethod always returns false

重复

答案 1 :(得分:1)

也许您的验证码是在点击功能(或其他事件)中,所以它被多次调用? 你应该把它放在$(文件).ready()里面。 此外,您应该发送数据:

...
data: {'email': value},
...

所以它将被urlencoded。如果您不这样做,“a@a.c&om”等电子邮件将有效

答案 2 :(得分:0)

只需为你的ajax调用添加async:false参数,你就可以了

相关问题