javascript - Parsley.js 如果值为空,请勿使用远程验证

标签 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');

我的问题是,如果用户没有输入值,欧芹也会向 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);
        }
    };
});

最佳答案

您可以实现这一点,但不能使用 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

关于javascript - Parsley.js 如果值为空,请勿使用远程验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25989490/

相关文章:

html - 为什么我们不应该将 block 元素放在行内元素中

javascript - Yii Framework formbuilder - 有没有办法改变验证javascript中的inputID?

javascript - 两个索引之间的多个顺序字符串替换

javascript - 表单验证错误 : Anytime I click on the submit button, 我在 errorDiv 上收到附加错误结果

javascript - 突出显示表格左下半部分的单元格(三 Angular 形)

javascript - 如何使用 "Scroll To"来考虑不同媒体查询的固定导航高度?

javascript - 如何在单击相应页脚时动态获取 Bootstrap 标题值?

asp.net - Asp.Net RequireFieldValidator 和 Javascript 所见即所得的问题

javascript - Raphael 未运行回调参数

javascript - 右键单击并粘贴启用发送按钮