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

jQuery click事件addClass生效 二次点击removeClass失效问题

问题根因

你为.call-us-button .call元素绑定了两个触发时机完全一致的click事件监听器。元素被点击时,两个监听器会按绑定顺序先后执行:先执行淡入内容、添加callBtnActive类的逻辑,紧接着立刻执行淡出内容、移除callBtnActive类的逻辑,最终表现就是永远看不到移除类对应的交互效果,看起来只有addClass逻辑生效。

修复代码

两种实现方式都可以,推荐第一种更简洁:

方式1:直接使用jQuery自带的切换方法

fadeToggle()会自动匹配元素当前显示状态执行淡入/淡出,toggleClass()会自动判断类名是否存在执行添加/移除,不需要手动写分支判断:

(function ($) {
  $(".call-us-button .call").on("click", function () {
    // 提前缓存父元素jQuery对象,减少重复DOM查询
    const $parentWrap = $(this).parent();
    $parentWrap.find(".phone-number").fadeToggle();
    $parentWrap.find(".qr-code-call").fadeToggle();
    $parentWrap.toggleClass("callBtnActive");
  });
})(jQuery);

方式2:手动判断类状态执行对应逻辑

如果后续需要在激活/未激活状态加更多差异化逻辑,可以手动判断当前类名状态走分支:

(function ($) {
  $(".call-us-button .call").on("click", function () {
    const $parentWrap = $(this).parent();
    if ($parentWrap.hasClass("callBtnActive")) {
      // 已激活状态下点击:执行关闭逻辑
      $parentWrap.find(".phone-number").fadeOut();
      $parentWrap.find(".qr-code-call").fadeOut();
      $parentWrap.removeClass("callBtnActive");
    } else {
      // 未激活状态下点击:执行展开逻辑
      $parentWrap.find(".phone-number").fadeIn();
      $parentWrap.find(".qr-code-call").fadeIn();
      $parentWrap.addClass("callBtnActive");
    }
  });
})(jQuery);
优化提示
  • 同一个触发时机下的互斥逻辑,不要拆分到多个独立事件监听里写,同类事件的监听会按绑定顺序依次全部执行,不会自动互斥
  • 重复使用的jQuery查询结果可以提前缓存到变量中,减少重复遍历DOM的性能开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:09:20