jquery
  • ajax
  • jquery-validate
  • validation
  • 2011-04-28 95 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調用,你會好起來

    相關問題