技术问题:已展开的jQuery Accordion点击自身无法关闭,需修复
实现Accordion点击自身可关闭的功能
当前你的Accordion组件仅支持点击其他Accordion来关闭已展开项,要实现点击已展开项自身也能关闭的效果,只需在点击事件中增加状态判断逻辑即可。
修改后的代码如下:
$(document).ready(function() { var accordionEntries = document.querySelectorAll('.accordion-entry'); var accordionImages = document.querySelectorAll('.accordion-image'); for (var i = 0; i < accordionEntries.length; i++) { accordionEntries[i].dataset.target = 'accordion-image-' + i; accordionImages[i].classList.add('accordion-image-' + i); } $(document).on('click', '.accordion-header', function() { var parent = $(this).closest('.accordion-entry'); var targetImageClass = parent.data('target'); // 判断当前Accordion是否处于展开状态 if (parent.hasClass('accordion-open')) { // 已展开则移除类名,关闭当前项 parent.removeClass('accordion-open'); $('.' + targetImageClass).removeClass('accordion-open'); } else { // 未展开则先关闭所有已展开项,再展开当前项 $('.accordion-open').removeClass('accordion-open'); parent.addClass('accordion-open'); $('.' + targetImageClass).addClass('accordion-open'); } }) })
关键改动说明:
- 先获取当前点击项的父容器
parent以及对应的图片容器类名 - 新增状态判断:如果当前父容器已经带有
accordion-open类(说明处于展开状态),则移除该类来关闭当前Accordion和对应图片区域 - 如果当前项未展开,保持原有逻辑:先关闭所有已展开的Accordion,再展开当前选中项
内容的提问来源于stack exchange,提问作者Kim123
相关产品推荐
相关产品推荐

