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

使用jQuery .append()实现递归添加元素的问题咨询

解决动态添加元素的点击事件无响应问题

这个问题其实很常见——你用.click()绑定事件的时候,它只会给页面初始加载时就存在的.plus_sign元素绑定点击逻辑,后来通过append动态添加的新按钮,根本没被绑定事件,自然点了没反应。

最优雅的解决方案是用事件委托(Event Delegation),原理是把事件绑定到一个已经存在的父级元素(甚至document)上,利用事件冒泡的特性,来处理动态添加的子元素的点击。修改后的代码如下:

// 把事件绑定到document(或者更接近的父容器,比如#country,效率更高)
$(document).on('click', '.plus_sign', function() {
  // 注意:你原来的$("country")是错误的选择器!这里要改成对应容器的id/class选择器
  $("#country").append(`<div> 
    <select name="" id=""> 
      <option value="">sdfasfdasd</option> 
      <option value="">sdfasfdasd</option> 
      <option value="">sdfasfdasd</option> 
      <option value="">sdfasfdasd</option> 
    </select> 
    <input type="text"> 
    <i class="fa fa-plus plus_sign"></i> 
  </div>`); 
});

几个关键点说明:

  • 事件委托的核心是$(父元素).on('事件类型', '目标选择器', 处理函数),这样不管是初始的还是后来动态添加的.plus_sign,点击时事件都会冒泡到父元素,从而触发处理逻辑。
  • 优先选择最接近目标元素的父容器(比如如果你的country是一个id为country的div,就用$("#country").on(...)),比绑定到document上效率更高。
  • 你原来代码里的$("country")是错误的,这会去找<country>标签,一定要改成$("#country")(id选择器)或者$(".country")(类选择器),否则append操作根本不会生效。

另外还有一种方案,就是每次添加新元素后,手动给新的.plus_sign绑定事件,但这种方式代码更繁琐,不如事件委托简洁:

// 先给初始的按钮绑定事件
$('.plus_sign').click(addNewCountryItem);

function addNewCountryItem() {
  // 先创建新元素
  const newItem = $(`<div> 
    <select name="" id=""> 
      <option value="">sdfasfdasd</option> 
      <option value="">sdfasfdasd</option> 
      <option value="">sdfasfdasd</option> 
      <option value="">sdfasfdasd</option> 
    </select> 
    <input type="text"> 
    <i class="fa fa-plus plus_sign"></i> 
  </div>`);
  
  // 添加到容器
  $("#country").append(newItem);
  
  // 给新添加的按钮绑定事件
  newItem.find('.plus_sign').click(addNewCountryItem);
}

不过还是更推荐事件委托的方案,尤其是当你需要频繁添加元素的时候,它的代码维护性和性能都更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:33:25