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

jQuery点击分组添加练习按钮时所有分组同步新增内容的问题排查

问题原因

  • 核心错误:点击事件中使用$(this).parents().find('.lista-esercizi')时,parents()会匹配按钮所有上层元素,find会命中页面内所有分组的练习列表容器,导致练习框被插入到全部分组
  • 冗余逻辑:每次新建分组都遍历全部分组重新绑定添加练习按钮的点击事件,会导致旧按钮重复绑定,执行多次插入逻辑
  • 变量错误:更新练习表单计数时错误使用了外层分组的计数变量form_idx,会导致表单索引计数异常

修复方案

推荐用事件委托处理动态生成的元素,不需要每次新增分组都单独绑定事件,修正后代码如下:

// 页面加载完成后统一绑定事件,仅执行一次
$(function() {
  // 绑定添加分组事件
  $('#addgroup').on("click", function(){
    var form_idx = $('#id_form-TOTAL_FORMS').val();
    var addgro = $('#form-gruppo-vuoto').html().replace(/__prefix__/g, form_idx);
    $('.lista-gruppi').append(addgro);
    $('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1);
  });

  // 委托绑定所有分组的添加练习按钮点击事件,动态生成的按钮自动生效
  $(".lista-gruppi").on("click", ".addesercizio", function(){
    var form_ids = $('#id_form-TOTAL_FORMS').val();
    // 全局取练习模板,不需要从父级查找
    var addes = $('#form-esercizio-vuoto').html().replace(/__prefix__/g, form_ids);
    // 只查找当前按钮所属分组下的练习列表
    $(this).closest('.gruppo-container').find('.lista-esercizi').append(addes);
    // 用当前的练习计数更新表单总数
    $('#id_form-TOTAL_FORMS').val(parseInt(form_ids) + 1);
  });
});

注:如果你的分组外层容器类名不是gruppo-container,替换成你实际的分组容器类名即可。

改动说明

  • 采用事件委托绑定添加练习事件,所有动态新增的分组按钮无需重复绑定即可生效
  • 用closest()方法精准匹配当前按钮所属的单个分组容器,只会操作当前分组下的练习列表
  • 修正了计数变量引用错误,保证表单索引自增逻辑正常
  • 移除了重复绑定事件的冗余逻辑,避免多次触发插入操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:54:04