2012-04-25 110 views
0

我正在使用驗證插件與我的表單,我正在面臨與遠程函數的一些困難。jquery驗證遠程函數

我正在使用它來ajax發佈到一個文件,然後返回true或false。 當我輸入一個電子郵件被採取或採取用戶名,它會提示正確的錯誤信息。

但是,當ajax返回true時,它不會做任何事情。也就是說,直到我點擊電子郵件輸入框,然後點擊重新觸發它。那麼它會驗證它。我曾嘗試過很多不同的解決方案,比如onblur觸發器等。事情是,所有其他輸入字段都是開箱即用,沒有問題。 checkmail文件是非常直接的,迴應真或假,沒有真正的問題,在那裏..

這是一個電子郵件檢查和用戶名檢查和規則是相同的兩個,除了它調用的文件:

$("#registerHere").validate({ 
onkeyup: false, 
onblur: true, 
rules:{ 
        usr_name: { 
        required: true, 
        minlength: 5, 
        remote: { 
        url: "inc/checkuser2.php", 
        type: "post", 
        async: false 
            } 
        }, 
        full_name:"required", 
        blog_name:"required", 

user_email: { 
    required: true, 
    email: true, 
    remote: { 
     url: "inc/checkmail.php", 
     type: "post", 
     async: false, 
     data: { 
      user_email: function() { 
       return $("#user_email").val() 
      } 
     } 
    } 
}, 
        pwd:{ 
         required:true, 
         minlength: 6 
        }, 
        cpwd:{ 
         required:true, 
         equalTo: "#pwd" 
        }, 
        gender:"required" 
       }, 

       messages:{ 
        usr_name:{ 
        required: "Velg et brukernavn", 
        minlength: "Minimum 5 bokstaver", 
        remote: "Dette brukernavnet er opptatt" 
        }, 

        full_name:"Skriv inn navnet ditt", 
        blog_name:"Velg en tittel til bloggen din", 

        user_email:{ 
         required: "Fyll inn e-post adressen din", 
         email:"Dette er ikke en gyldig e-post adresse", 
         remote:"Denne e-posten finnes allerede" 
        }, 
        pwd:{ 
         required:"Velg passord", 
         minlength:"Passordet må ha 6 tall og bokstaver" 
        }, 
        cpwd:{ 
         required:"Gjenta passordet", 
         equalTo:"Passordene er ikke like" 
        }, 
        gender:"Velg kjønn" 
       }, 

       errorClass: "help-inline", 
       errorElement: "span", 
       highlight:function(element, errorClass, validClass) { 
        $(element).parents('.control-group').addClass('error'); 
       }, 
       unhighlight: function(element, errorClass, validClass) { 
        $(element).parents('.control-group').removeClass('error'); 
        $(element).parents('.control-group').addClass('success'); 
       } 

      }); 

這裏是我的checkmail.php(將消毒一次,它的工作原理):

$duplicate = mysql_query("select count(*) as total from users where user_email='$user' ") or die(mysql_error()); 
    list($total) = mysql_fetch_row($duplicate); 
     if ($total > 0) 
     { 
    $valid = 'false'; 
     } else { 
    $valid = 'true'; 
     } 
    echo $valid; 
    exit; 

這不是關鍵,因爲形式似乎提交,但我討厭離開它這樣當我如此接近我想要的東西!

希望這是可以理解的,我真的很感謝任何幫助,因爲我閱讀並嘗試了谷歌給我的一切!

+0

你能告訴我們錯誤嗎?什麼使它不起作用 – Gerep 2012-04-25 18:24:20

+0

它不是真的發生錯誤。它不會首先觸發驗證事件。我必須通過再次點擊輸入來重新觸發它。那麼它工作正常。但是如果使用電子郵件,它會一次觸發。 – Havihavi 2012-04-25 18:26:28

+0

您是否嘗試過使用http://api.jquery.com/trigger/? – Gerep 2012-04-25 18:27:49

回答

0

我相信,當涉及表單驗證插件中的AJAX時,您需要使用回調並返回元素。

onkeyup: function(element) { 
    this.element(element); 
} 

這樣做的缺點是,它會執行你的AJAX每KEYUP,所以你要執行某種檢查你的回調中。例如:

onkeyup: function(element) { 
    if (element.type == 'password') 
     this.element(element); 
    else 
     return true; 
}