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

如何让Shopify手风琴仅点击头部关闭,点击内部内容不关闭?

解决Shopify手风琴面板点击表单自动关闭问题

问题描述

我在Shopify上开发一个4面板手风琴组件,面板内包含链接和表单。目前遇到的问题是,点击表单输入框或交互元素时,手风琴面板会自动关闭,这是最后需要完善的功能点。

已实现代码

JavaScript代码

$(function() {
  // (Optional) Active an item if it has the class "is-active"  
  $(".accordion > .accordion-item.is-active").children(".accordion-panel").slideDown();

  $(".accordion > .accordion-item").click(function() {
    // Cancel the siblings
    $(this).siblings(".accordion-item").removeClass("is-active").children(".accordion-panel").slideUp();
    // Toggle the item
    $(this).toggleClass("is-active").children(".accordion-panel").slideToggle("ease-out");
  });
});

HTML代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="accordion">
  <li class="accordion-item">
    <h3 class="accordion-thumb">{{ product.metafields.custom.first_accordion_title }}</h3>
    <p class="accordion-panel">{{ product.metafields.custom.first_accordion_description }}</p>
  </li>
  <li class="accordion-item">
    <h3 class="accordion-thumb">{{ product.metafields.custom.second_accordion_title }}</h3>
    <p class="accordion-panel">{{ product.metafields.custom.second_accordion_description }}</p>
  </li>
  <li class="accordion-item">
    <h3 class="accordion-thumb">{{ product.metafields.custom.third_accordion_title }}</h3>
    <p class="accordion-panel">{{ product.metafields.custom.third_accordion_description }}</p>
  </li>
  <li class="accordion-item">
    <h3 class="accordion-thumb">{{ product.metafields.custom.fourth_accordion_title }}</h3>
    <div class="accordion-panel">
      <div id="shopify-product-reviews" data-id="{{product.id}}">{{ product.metafields.spr.reviews }}</div>
    </div>
  </li>
</ul>

问题原因

当前代码将点击事件绑定在了整个.accordion-item元素上,当点击面板内的表单元素(如输入框、按钮)时,事件会向上冒泡到父元素.accordion-item,触发绑定的切换逻辑,导致面板被关闭。

解决方案

方案1:阻止面板内元素的事件冒泡

修改JavaScript代码,判断点击目标是否在面板区域内,若是则跳过切换逻辑:

$(function() {
  // 初始化激活的面板
  $(".accordion > .accordion-item.is-active").children(".accordion-panel").slideDown();

  $(".accordion > .accordion-item").click(function(e) {
    // 若点击的是面板内的元素,不执行切换操作
    if ($(e.target).closest(".accordion-panel").length) {
      return;
    }
    // 关闭其他兄弟面板
    $(this).siblings(".accordion-item").removeClass("is-active").children(".accordion-panel").slideUp();
    // 切换当前面板状态
    $(this).toggleClass("is-active").children(".accordion-panel").slideToggle("ease-out");
  });
});

方案2:将点击事件绑定到标题元素

只让点击手风琴标题(.accordion-thumb)时触发面板切换,避免面板内交互触发关闭:

$(function() {
  // 初始化激活的面板
  $(".accordion > .accordion-item.is-active").children(".accordion-panel").slideDown();

  $(".accordion > .accordion-item .accordion-thumb").click(function() {
    var $item = $(this).parent(".accordion-item");
    // 关闭其他兄弟面板
    $item.siblings(".accordion-item").removeClass("is-active").children(".accordion-panel").slideUp();
    // 切换当前面板状态
    $item.toggleClass("is-active").children(".accordion-panel").slideToggle("ease-out");
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:55:34