刚开始使用ParlseyJS进行我们正在做的一些新工作。
我遇到了一个问题,即根据下拉值(在表单中)隐藏和禁用一堆下拉列表。当我提交此表单时,这些字段将继续得到验证。这些字段是通过jQuery禁用的:
minage.removeAttr('data-parsley-minagecheck').attr('data-parsley-excluded', '').attr('disabled', 'disabled');
maxage.removeAttr('data-parsley-maxagecheck').attr('data-parsley-excluded', '').attr('disabled', 'disabled');
xxx.removeAttr('data-parsley-xxxcheck').attr('data-parsley-excluded', '').attr('disabled', 'disabled');
yyy.removeAttr('data-parsley-yyycheck').attr('data-parsley-excluded', '').attr('disabled', 'disabled');
您会注意到我也删除了自定义验证检查,并且我将排除字段添加到下拉列表的属性中。
如何阻止它们被验证?
我更新了我的Parsley.js文件以设置ParsleyDefaults:
excluded: 'input[type=button], input[type=submit], input[type=reset], input[type=hidden], [disabled]',
答案 0 :(得分:4)
将Parsley绑定到表单后,仅删除属性是不够的。这是因为Parsley将使用该表单的约束创建一个ParsleyForm
对象。
此外,在将Parsley绑定到表单时,将考虑excluded
选项。在您的情况下,字段尚未被禁用,因此将其用于验证目的。
您需要在删除属性后销毁和应用欧芹,因此ParsleyForm
不会包含这些字段。如果您使用的是Parsley v2,则应在删除或插入属性后添加此代码:
$("#myForm").parsley().destroy();
$("#myForm").parsley();
另请注意,从jQuery 1.6开始.attr()个州
从jQuery 1.6开始,.attr()方法为尚未设置的属性返回undefined。 要检索和更改DOM属性,例如表单元素的
checked
,selected
或disabled
状态,请使用.prop()方法。
所以你应该使用
minage.removeAttr('data-parsley-minagecheck')
.attr('data-parsley-excluded', '').prop('disabled', true);