【问题标题】:Parsley JS 2.x - disabling validation for fields that are not visibleParsley JS 2.x - 禁用不可见字段的验证
【发布时间】:2014-07-02 18:49:27
【问题描述】:

如果输入不可见,我想让 Parsley 不验证输入。我有一个大型的多步骤调查,当你完成它时会显示新的部分。每个部分都有自己的标签,在每个表单中,我可以有多个部分在您浏览时显示。我目前正在使用 1.x,这就是我现在的做法:

$('#' + formID).parsley({
            errors : {
                container: function(element) {
                    var $container = element.parent().find('parsley-container');
                    if($container.length === 0)
                    {
                        if($(element).hasClass('text-hide') && !$(element).hasClass('not-select'))
                        {
                            $(element).prev().addClass('is-error'); 
                        }
                        else
                        {
                            $container = $('<div class="parsley-container"></div>').insertAfter(element);
                        }
                    }
                    return $container;
                }
            },
            listeners: {
                onFieldValidate: function(elem) {
                    if(!$(elem).is(':visible'))
                    {
                        return true;
                    }
                    return false;
                }
            }

在侦听器部分,我只验证可见的字段。我怎样才能在 Parsley 2.x 中做到这一点?我一直在阅读文档,但找不到等效的方法。我知道 2.x 中有验证组,但有没有办法像我在 1.x 中那样做?

【问题讨论】:

    标签: javascript jquery validation parsley.js


    【解决方案1】:

    最简单的解决方案是排除所有隐藏的输入,如下所示:

    $('#' + formID).parsley({
        excluded: "input[type=button], input[type=submit], input[type=reset], input[type=hidden], input:hidden"
    });
    

    这样验证只会绑定可见的输入。但是,这会迫使您在每次输入更改其可见性时销毁并应用 Parsley。

    为避免这种情况,您可以使用以下“不太优雅”的解决方案。这段代码在 'parsley:field:validate' 事件中会更好,但我无法让它工作。

    使用 'parsley:field:validated',验证已经执行,现在我们将验证结果更改为 true 并隐藏错误容器。

    $('#' + formID).parsley();
    
    $.listen('parsley:field:validated', function(fieldInstance){
        if (fieldInstance.$element.is(":hidden")) {
            // hide the message wrapper
            fieldInstance._ui.$errorsWrapper.css('display', 'none');
            // set validation result to true
            fieldInstance.validationResult = true;
            return true;
        }
    });
    

    从 Parsley 2.1.* 开始,parsley:field:validated 事件会引发以下消息

    Parsley 的 pubsub 模块已弃用;改用对应的jQuery事件方法

    你应该使用事件field:validated而不是parsley:field:validated


    最新版本已弃用 $.listen()。您应该改用Parsley.on()。示例:

    Parsley.on('field:validated', function(fieldInstance){
        if (fieldInstance.$element.is(":hidden")) {
            // hide the message wrapper
            fieldInstance._ui.$errorsWrapper.css('display', 'none');
            // set validation result to true
            fieldInstance.validationResult = true;
            return true;
        }
    });
    

    【讨论】:

    • 很好的答案,为我节省了大量时间。考虑到你正在开发一个插件,我认为它非常优雅......
    • 我要补充一点,您要小心使用它,因为如果您将隐藏字段的可见性切换回可见,您将需要擦除验证实例。
    • @Potherca:感谢您的更新。我尝试对其进行测试,但我使用的是 2.0.7 版本而不是 2.1.2 版本(cdnjs.com 没有最新版本),这就是我回滚您的编辑的原因。在深入挖掘之后,我意识到这与 2.1 版有关,我稍微调整了您的编辑。谢谢!
    • 我们应该使用“$.on”而不是“$.listen”吗?找不到 listen 方法的文档。
    • @Andrey $.listen 已被弃用(根据 this comment)。请改用Parsley.on()。我已经更新了答案。谢谢!
    猜你喜欢
    • 2014-09-29
    • 2018-12-30
    • 1970-01-01
    • 2014-03-04
    • 2017-03-24
    • 2015-02-07
    • 2018-01-25
    • 2016-12-03
    • 2017-03-11
    相关资源
    最近更新 更多