我有一个表格,我正在使用Parsley.js进行验证。一切都像魅力一样。除此之外,表单的一部分允许用户添加新字段:
addFieldsToContainer = function($fields, $container) {
$fields.clone(true).removeClass('empty-form').appendTo($container);
if (typeof(Parsley) !== 'undefined'){
$('form.form-horizontal').parsley().destroy();
addValidatorsListeners();
}
};
我的验证有点复杂,因为有部分,并且在每个部分中,输入必须全部加起来总数,这是另一个输入的值。我已将输入触发到blur
,如果输入了任何输入且该部分的总数错误,则该部分的所有输入都将被赋予parsley-error
类,反之亦然。现在,在添加到DOM的新输入上,parsley ui没有对它进行处理,即parsley-success/error
类没有被添加到它。但该部分的其余部分仍然可以正常工作,甚至包括总计算中输入中的任何数字。我也在开发控制台中看到了这两个错误:
Uncaught TypeError: Cannot set property 'validatedOnce' of undefined parsley.min.js:8
Uncaught TypeError: Cannot read property '$errorsWrapper' of undefined
我的代码here。
如何正确地将这些新输入绑定到欧芹验证器?
编辑:
所以我才意识到,当用户点击添加输入按钮时,所有具有parsley:success/error
类的输入都将它们全部删除(因为model_form.parsley().destroy()
我假设?)除了对于已添加的新输入。正如我所指出的,这个输入类永远不会随着该部分的其余部分而改变。此外,总注册输入没有变化,我猜是因为{ excluded: '[data-parsley-sum-total="all"]' }
行。所以看起来从页面克隆的输入没有破坏它的绑定或正确添加验证器,所以某种事件处理问题?
答案 0 :(得分:2)
如果你用他们的数据克隆Parsley的元素,是的,Parsley会被混淆为地狱。
我只是建议不这样做。更确切地说,克隆没有数据和事件,或者在与parlsey绑定之前克隆。
如果真的必须采用这种方式,那么如果你$yourClone.removeData('Parsley')
,你可能会在之后克隆。我没有对它进行过测试,也无法保证,即使它现在可以使用,也会在将来使用。