我想验证隐藏字段,所以基本上我想从欧芹的排除表单元素列表中删除input[type=hidden]
。我尝试在parsley的选项中明确设置排除的元素,但隐藏的字段仍然没有经过验证。 E.g:
$(element).parsley({
excluded: 'input[type=button], input[type=submit]'
});
有关如何实现这一点的想法,或者我做错了什么?
答案 0 :(得分:8)
我猜这是一个错误。
采取以下形式:
<form method="post" id="myForm">
<input type="text" name="field1" value="" class="required" />
<input type="hidden" name="hiddeninput" value="" class="required" />
<input type="submit" value="Go">
</form>
使用以下javascript,即使我们告诉Parsley验证隐藏字段,它也不起作用:
$("#myForm").parsley({
excluded: 'input[type=button], input[type=submit], input[type=reset]',
inputs: 'input, textarea, select, input[type=hidden], :hidden',
});
但是,如果您将其定义为global configuration,则可以正常使用
window.ParsleyConfig = {
excluded: 'input[type=button], input[type=submit], input[type=reset]',
inputs: 'input, textarea, select, input[type=hidden], :hidden',
};
$("#myForm").parsley();
答案 1 :(得分:1)
我有同样的问题,但即使我设置全局配置它也无法正常工作。 问题本质上是我正在重新定义选项。
全局配置:
window.ParsleyConfig = {
excluded: 'input[type=button], input[type=submit], input[type=reset]',
inputs: 'input, textarea, select, input[type=hidden], :hidden',
};
在我的代码中,我必须动态更改输入。然后,我将它们设置为默认值:
instance = $('form.parsley-validate').parsley(inputs: "input, textarea, select, input[type=hidden], :hidden")
我必须改为
instance = $('form.parsley-validate').parsley(inputs: "input, textarea, select, input[type=hidden], :hidden", excluded: 'input[type=button], input[type=submit], input[type=reset]')
要外卖:如果更改配置,则必须覆盖所有设置。
答案 2 :(得分:0)
这绝对是欧芹中的一个错误,事实上有人已经开了一个关于它的问题,请参阅:https://github.com/guillaumepotier/Parsley.js/issues/664,但遗憾的是还没有完成任何事情。基本上,在分析了欧芹的源代码之后,问题是如果该字段已被全局排除,则忽略parsleyFormInstance的选项。有以下if语句决定这一点:
else if (this.$element.is(this.options.inputs) && !this.$element.is(this.options.excluded))
为了解决这个问题,我添加了以下代码行:
options = parsleyFormInstance == null ? options : parsleyFormInstance.options;
恰好在第2160行初始化OptionsFactory
之前this.OptionsFactory = new ParsleyOptionsFactory(ParsleyDefaults, ParsleyUtils.get(window, 'ParsleyConfig') || {}, options, this.getNamespace(options));
答案 3 :(得分:0)
初始化欧芹时可以使用排除隐藏字段的方法。但是,对于某些必须动态隐藏/取消隐藏表单部分的情况,它会带来缺点。另一种替代方法是覆盖“validated”事件,并在内部检查字段是否隐藏。
请参阅以下代码段:
$.listen('parsley:field:validated', function(fieldInstance){
if (fieldInstance.$element.is(":hidden")) {
fieldInstance._ui.$errorsWrapper.css('display', 'none');
fieldInstance.validationResult = true;
return true;
}});
答案 4 :(得分:0)
我所做的是:将输入字段设为readonly并通过css隐藏。