使用Parsley.js获取两个错误,以将验证器添加到动态克隆的字段中

时间:2015-04-16 19:58:42

标签: javascript parsley.js

我有一个表格,我正在使用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"]' }行。所以看起来从页面克隆的输入没有破坏它的绑定或正确添加验证器,所以某种事件处理问题?

Maybe related

1 个答案:

答案 0 :(得分:2)

如果你用他们的数据克隆Parsley的元素,是的,Parsley会被混淆为地狱。

我只是建议不这样做。更确切地说,克隆没有数据和事件,或者在与parlsey绑定之前克隆。

如果真的必须采用这种方式,那么如果你$yourClone.removeData('Parsley'),你可能会在之后克隆。我没有对它进行过测试,也无法保证,即使它现在可以使用,也会在将来使用。