更改元素 ID 时日期选择器失去绑定

Datepicker loses binding when changing element ID

我在表单集上使用 jQuery 日期选择器,我们可以在其中添加和删除表单。添加新表单时,我在 Form 原型中添加了一个 set_fields 函数,该函数将日期选择器附加到新字段并且工作正常。

但是,当删除表单时,我从 DOM 中完全删除所选表单并更新每个其他表单的 ID,以便它们连续编号(因此后端可以期望给定数量的连续编号的表格,而不是维护 'deleted' 列表)。

我遇到的问题是,当我删除一个表单并且更改了其余表单的 ID 时,日期选择器的绑定保留在下一个表单中,因此更改一个表单中的日期将更改下一个表单中的字段(最后一个表单给出错误 Missing instance data for this datepicker)。我已经尝试在更改 ID 后为表单调用 set_fields(因此在我更改了 ID 的所有字段上再次调用 datepicker())但绑定仍然没有改变.我还尝试手动循环遍历所有带有附加日期选择器的元素,并再次调用 datepicker(),但同样没有任何变化。

如果您需要查看代码的任何特定部分,请告诉我。

我最终找到了解决方案 here。问题在于,当字段添加了日期选择器时,该字段会被赋予 hasDatepicker class。如果您然后尝试在该字段上重新初始化日期选择器,如果该字段已经具有 hasDatepicker class,它将忽略它。所以我只是从我想重新初始化的每个元素中删除了 class,然后调用了我的 set_fields 函数并且它起作用了!

如果您更改元素的 ID,则必须删除 'hasDatepicker' class 然后使用选择器重新初始化日期选择器。

示例

$(selector).removeClass('hasDatepicker');
$(selector).datepicker({
  changeMonth: true,
  changeYear: true
});