修复Woocommerce Filter Everything插件点击空白处未关筛选列表问题
修复Filter Everything插件点击外部无法关闭筛选列表的问题
你的自定义脚本存在语法错误和逻辑漏洞,导致点击外部区域无法关闭筛选列表,以下是修复方案:
问题分析
你添加的脚本有三处关键问题:
- 语法混乱:
if (!$(e.target).is('.wpc-filters-section'))hasClass('wp-opened')是无效的JavaScript语法,逻辑判断写法错误 - 类名错误:将插件的
wpc-opened误写为wp-opened - 逻辑漏洞:未判断点击目标是否属于筛选区域内部元素(比如筛选按钮本身),也没有只针对已展开的筛选区域操作
修复后的完整脚本
替换你在functions.php中添加的脚本为以下代码:
<script> jQuery(document).ready(function($) { // 点击页面其他区域关闭已展开的筛选列表 $(document).on('click', function(e) { // 检查点击目标是否不在筛选区域内 if (!$(e.target).closest('.wpc-filters-section').length) { // 只关闭处于展开状态的筛选区域 $('.wpc-filters-section.wpc-opened').removeClass('wpc-opened').addClass('wpc-closed'); } }); // 阻止筛选区域内的点击事件冒泡,避免刚展开就关闭 $(document).on('click', '.wpc-filters-section', function(e) { e.stopPropagation(); }); }); </script>
代码说明
closest('.wpc-filters-section'):判断点击目标是否属于筛选区域内部的任何元素,比is()更准确——点击筛选按钮、筛选选项等内部元素都不会触发关闭逻辑.wpc-filters-section.wpc-opened:仅对已展开的筛选区域执行关闭操作,避免重复操作未展开的区域e.stopPropagation():阻止筛选区域内的点击事件向上冒泡到document,确保点击筛选按钮展开列表时,不会触发外部点击的关闭逻辑
内容的提问来源于stack exchange,提问作者Rawaf
相关产品推荐
相关产品推荐

