k_m*_*ada 8 javascript validation jquery 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;
}
}
Run Code Online (Sandbox Code Playgroud)
在侦听器部分,我只验证可见的字段.我怎样才能在Parsley 2.x中做到这一点?我一直在阅读文档,我找不到相同的方法.我知道2.x中有验证组,但有没有办法像我在1.x中那样做?
Luí*_*ruz 12
最简单的解决方案是排除所有隐藏的输入,如下所示:
$('#' + formID).parsley({
excluded: "input[type=button], input[type=submit], input[type=reset], input[type=hidden], input:hidden"
});
Run Code Online (Sandbox Code Playgroud)
这样,验证将仅绑定可见输入.但是,这会强制您在每次输入更改其可见性时销毁并应用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;
}
});
Run Code Online (Sandbox Code Playgroud)
从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;
}
});
Run Code Online (Sandbox Code Playgroud)