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

PrestaShop选中筛选复选框时仅展开对应隐藏分类项实现方法

PrestaShop左侧筛选菜单折叠异常修复方案

两个问题的核心原因都是DOM操作没有限定作用域,且初始化逻辑没有做选中项校验,直接按以下两步修改即可:

1. 修复「点击显示更多按钮所有筛选组同时展开」问题

原逻辑点击.more_filter时全局选择所有.toggleable元素操作,没有绑定当前按钮所属的筛选组上下文,修改为仅查找当前按钮所在筛选组内的折叠项即可:

// 绑定显示更多按钮点击事件
$(document).on('click', '.more_filter', function(e) {
  e.preventDefault();
  // 向上查找当前按钮所属的单个筛选组外层容器
  // 若主题自定义过筛选组类名,将 .filter-block 替换为实际的筛选组外层类即可
  const $currentGroup = $(this).closest('.filter-block');
  // 仅操作当前组内的折叠项
  const $toggleItems = $currentGroup.find('.toggleable');

  $toggleItems.slideToggle(200, () => {
    // 同步切换按钮文案
    $(this).text($toggleItems.is(':visible') ? '收起' : '显示更多');
  });
});

2. 修复「页面刷新后无选中项的筛选组被自动展开」问题

页面加载时不要直接读取Cookie全局展开所有折叠项,改为逐个遍历筛选组,仅展开组内存在已选中复选框的分组即可:

// 页面加载完成后初始化筛选菜单状态
$(function() {
  // 第一步:默认所有折叠项全部隐藏
  $('.toggleable').hide();

  // 第二步:遍历所有筛选组,检查是否存在已选中的筛选项
  $('.filter-block').each(function() {
    const $group = $(this);
    // 统计当前组内已勾选的复选框数量
    const checkedCount = $group.find('input[type="checkbox"]:checked').length;

    if (checkedCount > 0) {
      // 存在已勾选项则自动展开当前组,同步更新按钮文案
      $group.find('.toggleable').show();
      $group.find('.more_filter').text('收起');
    }
  });

  // Cookie读取逻辑保留即可,无需再做全局展开操作
  // 若需要记住用户手动展开的无选中项分组,可优化Cookie存储结构为已展开分组的ID列表,替代原来存open字符串的逻辑,90秒过期规则可保持不变
  function getCookie(name) {
    const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
    return match ? match[2] : null;
  }
});

注意事项

  • 代码中.filter-block为PrestaShop原生分层导航模块的筛选组默认类名,如果你的主题对筛选模块做过模板自定义,替换为实际包裹单个筛选维度(分类、属性、价格等)的外层容器类名,保证closest()方法能正确定位到当前按钮所属的分组即可。
  • 所有针对折叠项的DOM操作必须限定在单个筛选组的范围内,禁止直接使用全局选择器$('.toggleable')操作,即可彻底避免跨组联动展开的问题。

内容的提问来源于stack exchange,提问作者s.lafrag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:48:20