如何动态添加和删除要由Parsley.jsvalidation的表单字段?

我有一个表格(’#registrations’),我正在与Parsley.jsvalidation,到目前为止它工作正常。 但是,我正在尝试动态删除表单字段并将新的字段添加到Parsleyvalidation中,具体取决于某人在选择下拉列表中选择的内容(’#manureurer’)。

这是我的标记:

 Apple Blackberry HTC Huawei LG Motorola Nokia Samsung Sony Sony Ericsson  

这是我的JS:

 //init parsley $('#registrations').parsley(); $('#manufacturer').change(function() { //define selected value var manufacturer = $(this).val(); //destroy parsley $('#registrations').parsley('destroy'); //remove all models selects from parsley validation //if someone has previously selected a different manufacturer $('#registrations').parsley('removeItem', '#apple-models'); $('#registrations').parsley('removeItem', '#blackberry-models'); $('#registrations').parsley('removeItem', '#htc-models'); $('#registrations').parsley('removeItem', '#huawei-models'); $('#registrations').parsley('removeItem', '#lg-models'); $('#registrations').parsley('removeItem', '#motorola-models'); $('#registrations').parsley('removeItem', '#nokia-models'); $('#registrations').parsley('removeItem', '#samsung-models'); $('#registrations').parsley('removeItem', '#sony-models'); $('#registrations').parsley('removeItem', '#sony-ericsson-models'); //add corresponding models select to parsely $('#registrations').parsley('addItem', '#'+manufacturer+'-models'); //reinit parsley $('#registrations').parsley(); }); 

这不起作用,但我不知道为什么。

将新字段添加到Parsley后,您需要向该字段添加所需的约束。

 //add corresponding models select to parsely $('#registrations').parsley('addItem', '#'+manufacturer+'-models'); //add required constraint $('#'+manufacturer+'-models').parsley('addConstraint', { required: true }); 

更新(2014年4月10日)

以上适用于Parsley.js 1.x但不适用于Parsley 2.x.

Parsley 2.x不使用addItemremoveItemaddConstraintremoveConstraint

相反,Parsley 2.x将根据每个输入的数据属性自动检测表单中的更改。 在上面的示例中,如果要向Parsley添加新项,则可以执行以下操作:

 //destroy parsley $('form').parsley().destroy(); //set required attribute on input to true $('input').attr('data-parsley-required', 'true'); //reinitialize parsley $('form').parsley(); 

同样,如果你想从Parsley中删除一个项目,你会这样做:

 //destroy parsley $('form').parsley().destroy(); //set required attribute on input to false $('input').attr('data-parsley-required', 'false'); //reinitialize parsley $('form').parsley(); 

我在使用validates-if-empty设置为true遇到了这个问题。 简单地将其设置为false没有任何效果。 我必须删除属性。 在validationparley自动检测到更改。

 $('input').removeAttr('data-parsley-required'); $('input').removeAttr('data-parsley-validate-if-empty');