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

getJson循环内点击事件失效问题求助

解决动态生成元素的点击事件失效问题

你的问题出在事件绑定的时机不对:页面加载时,$(".Qlty button").click(...)就已经执行了,但此时.Qlty button还没被创建出来(因为getJSON是异步请求,要等请求完成后才会把元素添加到页面)。jQuery找不到目标元素时不会报错,只会跳过事件绑定,所以点击按钮自然没反应。

下面是两种可行的解决方案:

方案1:事件委托(推荐)

把事件绑定到页面加载时就存在的父元素上(比如#mainDiv),利用事件冒泡机制,过滤出真正触发事件的子元素。这种方式对现在和未来动态生成的元素都生效:

$.getJSON('/assets/data/maindata.json', function(bpds) {
  let mainProductCard = ''; // 建议初始化变量,避免意外拼接内容
  bpds.forEach((data) => {
    mainProductCard += '<div class="Qlty"><button value="'+ data.customFields[0].value +'">Ordinary</button><button value="'+ data.customFields[1].value +'">Premium</button></div>'
  });
  $('#mainDiv').append(mainProductCard);
});

// 用事件委托绑定点击事件
$('#mainDiv').on('click', '.Qlty button', function() {
  alert("alert working");
});

方案2:元素生成后再绑定事件

把点击事件的绑定代码放到getJSON的回调函数里,等元素被添加到页面后再执行绑定:

$.getJSON('/assets/data/maindata.json', function(bpds) {
  let mainProductCard = '';
  bpds.forEach((data) => {
    mainProductCard += '<div class="Qlty"><button value="'+ data.customFields[0].value +'">Ordinary</button><button value="'+ data.customFields[1].value +'">Premium</button></div>'
  });
  $('#mainDiv').append(mainProductCard);
  
  // 元素添加完成后再绑定事件
  $(".Qlty button").click(function() {
    alert("alert working");
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:22:21