You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免重复初始化Tempus Dominus日期选择器?

解决Tempus Dominus重复初始化日期选择器的问题

针对你遇到的重复初始化导致选择器叠加的问题,有两种可靠的解决方式:

方法一:利用Tempus Dominus内置的getInstance方法

Tempus Dominus提供了静态方法getInstance,可以直接检查目标元素是否已经绑定了日期选择器实例,返回null则说明未初始化:

$("#add").on("click", function(e) {
  e.preventDefault();
  bind_all_date_in_table();
});

function bind_all_date_in_table() {
  // 遍历表格的每一行(修正原代码中jQuery对象使用forEach的错误)
  $("#table tr").each(function() {
    const dateinput = $(this).find(".dateinput")[0];
    // 检查是否已有初始化实例
    const existingPicker = tempusDominus.TempusDominus.getInstance(dateinput);
    if (!existingPicker) {
      const dateinputPicker = new tempusDominus.TempusDominus(dateinput);
      dateinputPicker.subscribe("change.td", (e) => {
        // 对当前行执行相关操作
      });
    }
  });
}

方法二:给已初始化元素添加标记属性

通过自定义data-*属性标记已完成初始化的输入框,每次初始化前先检查该属性:

$("#add").on("click", function(e) {
  e.preventDefault();
  bind_all_date_in_table();
});

function bind_all_date_in_table() {
  $("#table tr").each(function() {
    const dateinput = $(this).find(".dateinput")[0];
    // 检查是否有已初始化标记
    if (!dateinput.dataset.tdInitialized) {
      const dateinputPicker = new tempusDominus.TempusDominus(dateinput);
      dateinputPicker.subscribe("change.td", (e) => {
        // 对当前行执行相关操作
      });
      // 添加标记,避免重复初始化
      dateinput.dataset.tdInitialized = "true";
    }
  });
}

额外提示

如果涉及删除行操作,建议在删除前调用实例的dispose()方法清理资源,并移除标记属性,避免内存泄漏:

// 示例:删除行时清理实例
function deleteRow(row) {
  const dateinput = row.querySelector(".dateinput");
  const picker = tempusDominus.TempusDominus.getInstance(dateinput);
  if (picker) {
    picker.dispose();
    delete dateinput.dataset.tdInitialized;
  }
  row.remove();
}

内容的提问来源于stack exchange,提问作者itajackass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:21:05