jQuery的。 将选择器应用于动态表单中的每个字段

我有一个使用这个jQuery插件动态构建的表单

http://code.google.com/p/jquery-dynamic-form/ 

当我复制div时div中的所有字段都是重复的,并且-as plugin docs state- bracket被添加到字段名称中

我也使用jQueryUI。 我使用datePicker插件

 $("#myDynDateField").datepicker(); 

当这个datePicker字段只有一个实例时,它工作正常。 当我复制整个div时,datePicker字段也会重复,并且错误开始

 
  inst未定义 
  未捕获的exception:缺少此datepicker的实例数据   

 

1)如何使用覆盖所有重复字段的jQuery选择器?
2)如何确保每个重复的datePicker字段都有正确的实例等?

非常感谢提前,

我不确定你是否使用$.clone()来’复制’你的元素,但如果你是,那么问题可能源于传递true旗帜。 例如$('div#id').clone(true) 。 这会克隆元素以及附加到它的事件(以及它的子元素)。 但是在jquery ui元素上使用它会破坏一些东西,所以最好在复制后重新定义元素的ui信息。

虽然您没有以这种粒度控制它,但机会很多。 或多或少,您遇到了问题,因为jqueryui不知道这些重复的表单字段。 我建议删除datepicker字段的’duped’版本,并用新的datepicker字段替换它。

像这样的东西:

 // code to duplicate form // ... // Now replace the element with one just like it but without any events $('#newDupedForm') .find('.datefield') .replaceWith( $(this).clone(false).datepicker(options) ); 

那应该从其他元素中删除任何到旧jquery ui datepicker的链接并实例化一个新的,但是如果有一些我缺少的东西,你总是可以从头创建输入元素并用它做replaceWith

当我在这个post中实现建议时,它开始为我工作:

 $('input.hasDatepicker', $clone).removeClass('hasDatepicker'); 

如果您使用$.slideDown ,则在完成幻灯片后似乎需要执行此操作,如下所示:

 $clone.slideDown(function() { $('input.hasDatepicker', $clone).removeClass('hasDatepicker'); }); 

我希望这有助于其他人; 这对我来说很烦人!