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

如何正确重新初始化jquery.repeater插件

解决jquery.repeater重复项问题:解绑/销毁插件并重新初始化

jquery.repeater官方并没有提供现成的destroy方法,但可以通过手动清理DOM和事件绑定的方式实现重置,避免重复初始化导致的重复项问题,具体步骤如下:

  • 清理插件绑定的事件
    先解绑插件为.repeater元素及其子元素绑定的所有事件,防止旧事件残留:

    // 解绑repeater容器及内部所有元素的相关事件
    $('.repeater').off('click keydown change');
    $('.repeater *').off('click keydown change');
    
  • 重置DOM结构
    移除插件生成的控制按钮(添加/删除按钮)、动态生成的重复项,只保留初始的原始表单结构:

    // 移除所有动态添加的重复项(保留第一个原始项)
    $('.repeater .repeater-item:not(:first)').remove();
    // 移除插件自动生成的模板容器和控制按钮
    $('.repeater .repeater-template, .repeater .repeater-add-btn').remove();
    
  • 重新初始化插件
    完成清理后,带上你的配置参数重新调用初始化方法:

    $('.repeater').repeater({
      // 你的自定义配置示例
      show: function() {
        $(this).fadeIn();
      },
      hide: function(remove) {
        $(this).fadeOut(remove);
      },
      isFirstItemUndeletable: true
    });
    

封装成工具函数(方便AJAX回调中调用)

把上述逻辑封装成函数,在AJAX请求完成、添加完额外字段后直接调用:

function resetAndInitRepeater() {
  // 清理事件
  $('.repeater').off();
  $('.repeater *').off();
  // 重置DOM
  $('.repeater .repeater-item:not(:first)').remove();
  $('.repeater .repeater-template, .repeater .repeater-add-btn').remove();
  // 重新初始化
  $('.repeater').repeater({
    // 填入你的插件配置
    isFirstItemUndeletable: true
  });
}

// 在AJAX回调中使用
$.ajax({
  url: '/your-api-endpoint',
  method: 'POST',
  success: function(response) {
    // 将AJAX返回的额外字段插入到repeater容器中
    $('.repeater').append(response.newFields);
    // 重置并重新初始化插件
    resetAndInitRepeater();
  }
});

注意事项

  • 确保在AJAX回调中,新字段插入DOM完成后再执行重置逻辑
  • 如果你的重复项模板是动态加载的,要确保模板元素正确插入后再初始化插件
  • 若初始表单没有默认的重复项,可根据需求调整DOM重置的逻辑(比如保留模板元素而非第一个项)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:45:13