Parsley JS 2.x - 禁用对不可见字段的验证

时间:2014-07-02 18:49:27

标签: javascript jquery validation parsley.js

如果不可见,我希望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中那样做?

1 个答案:

答案 0 :(得分:12)

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

$('#' + 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事件方法

您应该使用事件parsley:field:validated

而不是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;
    }
});