2014-09-23 103 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