簡體   English   中英

Parsley.js如果值為空,請勿使用遠程驗證

[英]Parsley.js Dont use remote validation, if value is empty

我有以下問題。 這是我要驗證的輸入

 <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在AJAX上觸發錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM