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

动态生成列表中jQuery点击切换li的active类异常问题求助

修复方案

我们直接改掉内联事件的写法,用jQuery的事件委托(因为你的列表是动态生成的,事件委托最靠谱),这样逻辑清晰还不会出问题:

第一步:先修改HTML,去掉内联的onclick

<ul class="config-swatch-list">
  <li class='color'>
    <a href="#" style="background-color: random_val"></a>
  </li>
  <li class='color'>
    <a href="#" style="background-color: random_val"></a>
  </li>
  <li class='color'>
    <a href="#" style="background-color: random_val"></a>
  </li>
  <li class='color'>
    <a href="#" style="background-color: random_val"></a>
  </li>
  <li class='color'>
    <a href="#" style="background-color: random_val"></a>
  </li>
</ul>

第二步:替换JS代码,用事件委托实现切换逻辑

而且jQuery有个toggleClass()方法,能直接帮你实现“有这个类就移除,没有就添加”的逻辑,代码更简洁:

// 给父元素绑定事件,委托给子元素li.color,动态生成的元素也能生效
$('.config-swatch-list').on('click', '.color', function(e) {
  // 阻止a标签默认的跳转行为,避免页面刷新
  e.preventDefault();
  // 直接切换active类
  $(this).toggleClass('active');
  console.log('clicked');
});

为啥原来的代码会出问题?

当你第一次点击第一个li时,调用color_select()给#color元素(如果页面里刚好有id为color的元素,可能第一个li被误匹配了)绑定了一次click事件;第二次点击这个li时,先执行color_select()再绑定一次,然后触发之前绑定的事件,才切换了class。后面的li点击时,重复绑定的次数更多,就出现了需要双击才生效的情况。

换成事件委托后,就彻底避免了重复绑定的问题,不管是静态还是动态生成的li,点击都能正常切换class啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:19:41