Parsley.js如果值为空,请不要使用远程验证

时间:2014-09-23 07:36:55

标签: javascript jquery validation 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');

我的问题是,如果用户没有输入值,则parsley会向api发送请求(在表单提交上),然后触发errors-mesage。如何避免这种情况并仅验证用户是否输入了某些内容?

更新

非常感谢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);
        }
    };
});

1 个答案:

答案 0 :(得分:1)

你可以做到这一点,但你不能使用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>

您还可以查看以下可提供信息的问题:Parsley.js Trigger Error on AJAX