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