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

卡片式Div交互异常:切换后需双击才能重新展开的问题排查

问题解决:卡片点击需双击才能展开的修复方案

问题根源

你的问题出在切换卡片时没有同步更新被收起卡片的data-clicked状态。比如点击第二个卡片时,你只移除了第一个卡片的激活样式、隐藏了额外内容,但没把它的data-clicked重置为初始的true。这导致第一个卡片的内部状态和视觉显示不一致,下次点击时会先执行一次“收起”逻辑(实际已经是收起状态),必须再点一次才会触发展开。


优化修复方案(推荐)

为了减少重复代码、提升可维护性,我们统一卡片的处理逻辑,用通用类替代单独的类名:

HTML(给卡片添加通用类promoItem)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
<section class="contentPromos">
  <div class="promoItem promoItemAlimento" data-clicked="true">
    <h3>Plano Alimentar individualizado</h3>
    <p>Tenha consultas mensais com a nutricionista para montar planos alimentares de acordo com suas necessidades, preferências e objetivos. </p>
    <div class="promoItem-naoativo">
      <p>Tenha consultas mensais com a nutricionista para montar planos alimentares de acordo com suas necessidades, preferências e objetivos. </p><br><br>
      <a class="contentPromos-btn" href="#" type="submit" onclick="vai()">EU QUERO RESULTADOS</a>
    </div>
  </div>
  <div class="promoItem promoItemTreino" data-clicked="true">
    <h3>Treinos personalizados</h3>
    <p>Tenha também planos de exercícios adaptados à sua rotina e de acordo com suas atividades de preferência, para realizar quando e onde quiser. </p>
    <div class="promoItem-naoativo">
      <p>Tenha também planos de exercícios adaptados à sua rotina e de acordo com suas atividades de preferência, para realizar quando e onde quiser.</p><br><br><br><br>
      <a class="contentPromos-btn" href="#" type="submit" onclick="vai()">EU QUERO RESULTADOS</a>
    </div>
  </div>
</section>

CSS(简化激活类)

.contentPromos {
  width: 100%;
  display: flex;
  flex-direction: row;
}

.promoItem {
  height: 390px;
  width: 33.33%;
  text-align: center;
  background-color: #f7afaf;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  border: 2px solid black;
}

.promoItem-naoativo {
  display: none;
}

.promoItem.card-ativo {
  height: 600px;
}

JavaScript(统一处理逻辑)

$('.promoItem').on('click', function() {
  const $currentCard = $(this);
  const isCurrentlyClicked = $currentCard.data('clicked');

  // 先收起所有其他卡片,并同步它们的状态
  $('.promoItem').not($currentCard).each(function() {
    $(this)
      .removeClass('card-ativo')
      .find('.promoItem-naoativo').css('display', 'none')
      .end()
      .data('clicked', true); // 重置为初始的收起状态
  });

  // 处理当前卡片的展开/收起
  if (isCurrentlyClicked) {
    // 当前是收起状态,执行展开
    $currentCard.addClass('card-ativo');
    $currentCard.find('.promoItem-naoativo').css('display', 'block');
    $currentCard.data('clicked', false);
  } else {
    // 当前是展开状态,执行收起
    $currentCard.removeClass('card-ativo');
    $currentCard.find('.promoItem-naoativo').css('display', 'none');
    $currentCard.data('clicked', true);
  }
});

最小修改方案(不改动HTML/CSS)

如果不想调整现有HTML和CSS结构,只需修改JavaScript逻辑,在切换卡片时同步更新被收起卡片的data-clicked状态:

$('.promoItemAlimento').on('click', function() {
  const $this = $(this);
  if (!$this.data('clicked')) {
    $this.removeClass('card-ativo1');
    $(".promoItemAlimento-naoativo").css("display", "none");
    $this.data('clicked', true);
  } else {
    // 收起第二个卡片并同步状态
    $('.promoItemTreino')
      .removeClass('card-ativo2')
      .find('.promoItemTreino-naoativo').css('display', 'none')
      .end()
      .data('clicked', true);
    
    $this.toggleClass('card-ativo1');
    $(".promoItemAlimento-naoativo").css("display", "block");
    $this.data('clicked', false);
  }
});

$('.promoItemTreino').on('click', function() {
  const $this = $(this);
  if (!$this.data('clicked')) {
    $this.removeClass('card-ativo2');
    $(".promoItemTreino-naoativo").css("display", "none");
    $this.data('clicked', true);
  } else {
    // 收起第一个卡片并同步状态
    $('.promoItemAlimento')
      .removeClass('card-ativo1')
      .find('.promoItemAlimento-naoativo').css('display', 'none')
      .end()
      .data('clicked', true);
    
    $this.toggleClass('card-ativo2');
    $(".promoItemTreino-naoativo").css("display", "block");
    $this.data('clicked', false);
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:31:04