Parsley JS 2.x - 你如何验证隐藏的字段?

时间:2014-08-06 13:46:38

标签: javascript parsley.js

我想验证隐藏字段,所以基本上我想从欧芹的排除表单元素列表中删除input[type=hidden]。我尝试在parsley的选项中明确设置排除的元素,但隐藏的字段仍然没有经过验证。 E.g:

$(element).parsley({
    excluded: 'input[type=button], input[type=submit]'
});

有关如何实现这一点的想法,或者我做错了什么?

5 个答案:

答案 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隐藏。