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'); });
我希望这有助于其他人; 这对我来说很烦人!