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

Javascript Parsley JS 2.x-禁用不可见字段的验证,javascript,jquery,validation,parsley.js,Javascript,Jquery,Validation,Parsley.js,我想让欧芹不验证输入,如果它不可见。我有一个大的多步骤调查,当你完成它时会发现新的部分。每个部分都有自己的标签,在每个表单中,我可以有多个部分在您浏览时显示出来。我目前正在使用1.x,我现在就是这样做的: $('#' + formID).parsley({ errors : { container: function(element) { var $container = element.parent

我想让欧芹不验证输入,如果它不可见。我有一个大的多步骤调查,当你完成它时会发现新的部分。每个部分都有自己的标签,在每个表单中,我可以有多个部分在您浏览时显示出来。我目前正在使用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;
                }
            }
$('#'+formID).欧芹({
错误:{
容器:函数(元素){
var$container=element.parent().find('parsley-container');
如果($container.length==0)
{
if($(element).hasClass('text-hide')&&!$(element.hasClass('not-select'))
{
$(element.prev().addClass('is-error');
}
其他的
{
$container=$('').insertAfter(元素);
}
}
退回$container;
}
},
听众:{
onFieldValidate:函数(elem){
如果(!$(elem).is(':visible'))
{
返回true;
}
返回false;
}
}

在listeners部分,我只验证可见的字段。如何在Parsley 2.x中做到这一点?我已经阅读了文档,但找不到等效的方法。我知道在2.x中有验证组,但有没有一种方法可以像在1.x中那样做?

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

$('#' + formID).parsley({
    excluded: "input[type=button], input[type=submit], input[type=reset], input[type=hidden], input:hidden"
});
这样,验证只会绑定可见的输入。但是,这会迫使您在每次输入更改其可见性时销毁并应用欧芹

为了避免这种情况,您可以使用下面的“不那么优雅”解决方案。在“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;
    }
});

自Parsley2.1.*事件
Parsley:field:validated
抛出以下消息

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

不要使用
parsley:field:validated
事件
field:validated


最新版本已弃用了
$.listen()
。应改用
欧芹.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 The
$.listen
已被弃用(根据)。请改用
Parsley.on()
。我已更新了答案。谢谢!