2016-03-18 35 views
1

我正在使用此jQuery驗證插件,http://jqueryvalidation.org/我正在創建一個添加方法,如下所示。jQuery驗證程序其他方法不按預期方式工作

jQuery.validator.addMethod('exists', function(value, element) { 
    $.ajax({ 
     data: {username: value}, 
     type: 'POST', 
     url: 'action/check/', 
     dataType: 'json', 
     success: function(data) { 
      if (data==true) { 
       console.log(data); 
       return true; 
      } 
      if (data==false) { 
       console.log(data); 
       return false; 
      } 
     } 
    }) 
}, 'This username is already in use'); 

我的控制檯是從check腳本得到適當的數據傳回,在我的控制檯我可以看到真假等,但我不明白的是驗證標誌似乎旗無論什麼樣的輸入輸入是。

rules: { 
     password_confirm: { 
      equalTo: 'input[name=password]' 
     }, 
     username: { 
      exists: true 
     } 
    } 

我已經有用戶名chris在我的數據庫,所以當我輸入chris到用戶名輸入我應該得到一個標誌是一個重複的用戶,但無論是什麼類型的,我得到了驗證標誌。

我缺少什麼

+0

,你已經給了你不能從一個Ajax方法返回一個值...因爲你想做一個基於ajax的驗證使用現有的遠程規則 –

回答

2

您的驗證將無法工作,因爲它是異步(Ajax請求)。

您可以使用現有的remote rule要做到這一點,請確保您的請求返回true/false作爲其結果

rules: { 
    password_confirm: { 
     equalTo: 'input[name=password]' 
    }, 
    username: { 
     remote: { 
     url: 'action/check/', 
     type: 'POST' 
     } 
    } 
    } 
+0

有助於完整閱讀api,感謝你的這一點 –

0
jQuery.validator.addMethod('exists', function(value, element) { 

     var result = false; 

     $.ajax({ 
      data: {username: value}, 
      type: 'POST', 
      url: 'action/check/', 
      dataType: 'json', 
      success: function(data) { 
       result = data; // make sure data returns bool value 
      } 
     }); 

     return result; 
    }, 'This username is already in use'); 
相關問題