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

标签 jquery ajax jquery-validate validation

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

$.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";
?>

它向我发出警告“true has been Registered”,并在电子邮件下显示消息。uniqueEmail: jQuery.format(“{0} 已注册”)。现在我在 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"
                });
            }
        }); 
    });

最佳答案

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

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

关于Jquery Validate 在电子邮件验证时始终返回 false,即使返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5815143/

相关文章:

Jquery - 如何设置索引从 1 而不是 0 开始的属性?

javascript - 来自 html title 属性的 jquery 工具提示

javascript - 单击链接后,打开新 URL 并自动*单击*该页面内的选项卡链接

javascript - jquery .valid() 验证所有偏移量

jquery - 如何使用 jQuery 远程验证依赖于表单中另一个字段的字段?

jQuery 切换导航语法错误?

javascript - 函数完成后继续 FOR 循环

javascript - 无法调用AJAX

jQuery 验证 equalTo 不适用于 Grails

javascript - 如何在jquery中查找类型是select还是input