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

Tailwind/Alpine.js手风琴点击切换按钮类与图标失效问题

问题根因

  1. 点击事件中的open = open是无效赋值,完全没有修改open变量的状态,所以:class绑定的判断逻辑永远使用初始值true,不会发生类切换。
  2. 你当前手风琴的展开/收起逻辑完全是靠selected变量控制,单独维护的open状态和展开状态完全脱节,很容易出现状态不同步的问题。

修复方案

不需要单独维护open变量,直接复用selected的状态做判断即可,修改后的代码如下:

<div x-data="{selected:null}">
  <dl class="faqs mx-auto max-w-2xl">
    <!-- dt元素同步切换类的逻辑已添加 -->
    <dt :class="{ 'dt-open': selected == 1, 'dt-close': selected != 1 }">
      <span class="faq-q">Question</span>
      <button
        type="button"
        class="faq-toggle"
        @click="selected !== 1 ? selected = 1 : selected = null"
        :class="{ 'faq-open': selected == 1, 'faq-close': selected != 1 }"
      >
        <!-- 图标显示逻辑也绑定selected状态,无需额外写死hidden类 -->
        <span x-show="selected != 1">+</span>
        <span x-show="selected == 1">-</span>
      </button>
    </dt>
    <dd
      class="faq-a overflow-hidden transition-all max-h-0 duration-700"
      x-ref="container1" 
      x-bind:style="selected == 1 ? 'max-height: ' + $refs.container1.scrollHeight + 'px' : ''"
    >
      <div class="inner">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure rerum in tempore sit ducimus doloribus quod commodi eligendi ipsam porro non fugiat nisi eaque delectus harum aspernatur recusandae incidunt quasi.
      </div>
    </dd>
  </dl>
</div>

扩展说明

如果后续要新增多个手风琴项,只需要把每个项的数字标识(当前示例为1)换成对应的值即可,所有状态都靠selected统一控制,不会出现状态不同步的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:36:00