【问题标题】:Jquery Validate always returns false on email validation even with true being returnedJquery Validate 在电子邮件验证中始终返回 false,即使返回 true
【发布时间】:2011-04-28 07:25:15
【问题描述】:

我知道有些帖子与我看过很多帖子几乎相同,但遗憾的是没有找到解决方案。我的问题是我使用 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} 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"
                });
            }
        }); 
    });

【问题讨论】:

  • 您可以尝试使用 .toString() 或 Boolean(msg)

标签: jquery ajax jquery-validate validation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    也许您的验证器代码位于点击函数(或其他事件)中,因此被多次调用? 你应该把它放在一次或放在 $(document).ready() 中。 此外,您应该这样发送数据:

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

    所以它将被 urlencoded。不填的话,‘a@a.c&amp;om’之类的邮箱有效

    【讨论】:

    • 是的,它在点击功能中,我使用 qTip 来处理我的错误气泡,它是删除所有错误气泡的最简单方法。我一次只有一次。我可能知道它的重要性,但它不是 $(document).ready 它是一个普通的 $(function()。在上面添加了我的完整调用
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 2017-03-31
      • 2021-08-22
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 2014-02-10
      • 2020-03-28
      • 2022-01-09
      相关资源
      最近更新 更多