2014-09-23 100 views
0

我遇到以下問題。這裏是輸入我想驗證Parsley.js如果值爲空,則不要使用遠程驗證

<input type="text" name="vatid" data-parsley-remote data-parsley-remote-validator='vatid'/> 

,這是asyncValidator

 $('[name="vatid"]').parsley() 
      .addAsyncValidator('vatid', function (xhr) { 
      return 404 === xhr.status; 
      }, confighandler.getConfig().apiUrl + '/checkvatids'); 

我的問題是,這也如果用戶沒有輸入值香菜發送一個請求(在表格提交)到api,然後觸發錯誤消息。我怎樣才能避免這種情況,並只驗證用戶是否輸入了某些內容?

更新

非常感謝milz,我已經得到了以下解決方案,它像魅力:)

define([ 
    'jquery', 
    'confighandler', 
    'requirejs-i18n!nls/labels', 
    'parsleyjs' 
], function($, confighandler, Labels) { 
    'use strict'; 
    return { 
     initialize: function() { 
      // add custom validators 
      window.ParsleyValidator 
       .addValidator('vatid', function(val) { 
        var isvalid; 
        $.ajax({ 
         url: confighandler.getConfig().apiUrl + '/checkvatids/' + val, 
         dataType: 'json', 
         type: 'get', 
         async: false, 
         success: function(response) { 
          isvalid = (response.result.data.isvalid === 'true') ? true : false; 
         }, 
         error: function() { 
          isvalid = false; 
         } 
        }); 
        return isvalid; 
       }, 32).addMessage('de', 'vatid', Labels.validation.vatid); 
     } 
    }; 
}); 

回答

0

可以做到,但是你不能使用ParsleyRemote。遠程驗證器的問題在於,在進行遠程Ajax調用之前,您無法驗證該值是否爲空。

此問題的一個可能的解決方案是添加一個自定義驗證程序.addValidator,然後放置一個ajax調用。

在這種情況下,您甚至不需要檢查輸入是否有任何內容,因爲驗證程序僅在輸入不爲空時執行。

<input type="text" name="vatid" data-parsley-vatid /> 

<script> 
$(document).ready(function() { 
    window.ParsleyValidator 
     .addValidator('vatid', function (value, requirement) { 
      var response = false; 

      $.ajax({ 
       url: confighandler.getConfig().apiUrl + '/checkvatids', 
       data: {vatid: value}, 
       dataType: 'json', 
       type: 'get', 
       async: false, 
       success: function(data) { 
        response = true; 
       }, 
       error: function() { 
        response = false; 
       } 
      }); 

      return response; 
     }, 32) 
     .addMessage('en', 'vatid', 'Vatid is invalid.'); 
}); 
</script> 

您還可以檢查以下問題,可以提供adicional信息:Parsley.js Trigger Error on AJAX

+1

我不得不修改了一下我的需求,但它的作品般的魅力!真棒! – crebuh 2014-09-24 13:05:22

+0

有趣,但爲什麼答案不是簡單地檢查字段值長度是否爲零,而是完全忽略觸發遠程驗證(考慮到您需要驗證值並且不接受空值)? – joe 2015-01-06 18:31:22

+0

@joe我不確定這是否是前一段時間,但我認爲你不能「跳過」遠程驗證。從我記得的情況來看,如果您有刪除驗證程序,它將始終得到驗證(也就是說,您無法控制,無法添加您建議的條件)。但是,如果您能夠這樣做,請發佈您的答案。 – 2015-01-06 21:05:55