jquery
  • ajax
  • jquery-validate
  • validation
  • 2011-04-28 47 views 1 likes 
    1

    我知道有些帖子几乎与我通过其中很多人看过的内容几乎相同,但可悲的是还没有找到解决方案。我的问题是我写了一个电子邮件valiadtor使用jQuery的.addmethod()函数jQuery验证插件。Jquery Validate在电子邮件验证中始终返回false,即使返回true也是如此

    $.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")。现在我有一个调试警报设置int他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" 
           }); 
          } 
         }); 
        }); 
    
    +1

    您可以尝试使用的ToString()或布尔(MSG) – 2011-04-28 07:31:43

    回答

    3

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

    这个问题的.post inside jQuery.validator.addMethod always returns false

    1

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

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

    因此它将url编码。如果你不这样做,电子邮件,如'[email protected]&om'将是有效的

    +0

    是的,它是在一个点击功能,我使用QTip我的错误气泡和它最简单的方法来删除所有这些。但我一次只有一次。我可能知道它的意义,但它不是ina $(document)。它已经在一个普通的$(function()中。 – Earthmonkey0 2011-04-28 07:42:49

    0

    重复只需添加异步:false参数为您的Ajax调用,你会好起来

    相关问题