简体   繁体   English

手风琴展开折叠图标问题

[英]Accordion expand collapse icon issue

I'm building an accordion that includes several children and displays an open/close icon on click. 我正在构建一个包含多个孩子的手风琴,并在单击时显示一个打开/关闭图标。

The issue I'm having is with the icons. 我遇到的问题是图标。 It's fine when you expand and collapse one at a time, but when you open multiple items the icons start acting oddly and display minuses when they should be pluses. 一次展开和折叠一个就可以了,但是当您打开多个项目时,图标开始出现奇怪的作用,并在应该加号时显示减号。

I've experimented with each and if else statements, but now luck as of yet. 我已经尝试了每一个if if语句,但是现在为止还很幸运。

I've also provided a link to my CodePen 我还提供了指向我的CodePen的链接

 $(document).ready(function(){ $('.pub-accordion-content').hide(); $('#pub-accordion').find('.pub-accordion-toggle').click(function(){ var $this = $(this); //Toggle icon $this.toggleClass("open"); //Expand or collapse this panel $this.next().slideToggle('fast') //Hide the other panels $(".pub-accordion-content").not($this.next()).slideUp('fast'); }); }); 
 #pub-accordion { padding: 24px; } #pub-accordion h4:first-child { border-top: 1px solid #ccc; } #pub-accordion h4 { border-bottom: 1px solid #ccc; color: #00539f; font-size: 1.6em; margin: 0; padding: 16px 0 16px 33px; cursor: pointer; } #pub-accordion .closed { background: url(http://www.dcholloway.co.uk/codepen/primary-collapse-icon.png) no-repeat 0 13px; } #pub-accordion .open { background: url(http://www.dcholloway.co.uk/codepen/primary-expand-icon.png) no-repeat 0 13px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <!-- Size Guide - - - - - - - - - - - - - - - - --> <div class="row row__im impage--no-margin"> <div class="page"> <div class="row"> <div class="s-100 m1-100 m2-100 l-100"> <div id="pub-accordion"> <h4 class="pub-accordion-toggle closed">Boys size guide</h4> <div class="pub-accordion-content default"> <p>Lorem ipsum dolor sit amet mauris eu turpis.</p> </div> <h4 class="pub-accordion-toggle closed">Girls size guide</h4> <div class="pub-accordion-content"> <p>Lorem ipsum dolor sit amet mauris eu turpis.</p> </div> <h4 class="pub-accordion-toggle closed">Boys plus fit size guide</h4> <div class="pub-accordion-content"> <p>Vivamus facilisisnibh scelerisque laoreet.</p> </div> <h4 class="pub-accordion-toggle closed">Girls plus fit size guide</h4> <div class="pub-accordion-content"> <p>Vivamus facilisisnibh scelerisque laoreet.</p> </div> </div> </div> </div> </div> </div> 

Just add the below line within click event at the beginning. 只需在click event的开头添加以下行。

$(".pub-accordion-toggle").removeClass('open');

So it will look like, 这样看起来,

$('#pub-accordion').find('.pub-accordion-toggle').click(function(){
    $(".pub-accordion-toggle").removeClass('open');//this here
    var $this = $(this);

    //Toggle icon
    $this.toggleClass("open");

    //Expand or collapse this panel
    $this.next().slideToggle('fast')

    //Hide the other panels
    $(".pub-accordion-content").not($this.next()).slideUp('fast');
});

You just remove any open class from .pub-accordion-toggle element. 您只需从.pub-accordion-toggle元素中删除所有open类。 That's what it does. 这就是它的作用。

Updated Pen 更新笔

Adding $('h4').removeClass("open").addClass("closed"); 添加$('h4').removeClass("open").addClass("closed"); to the click event is one solution. 单击事件是一种解决方案。 This remove the class open to all the <h4> and add close . 这将删除对所有<h4> open的类,并添加close

It works also with $(.pub-accordion-toggle) . 它也可以与$(.pub-accordion-toggle)

Edit: I made some corrections because I noticed that there were a problem when you clicked on an opened element. 编辑:我进行了一些更正,因为我发现单击打开的元素时出现问题。

 $(document).ready(function() { $('.pub-accordion-content').hide(); $('#pub-accordion').find('.pub-accordion-toggle').click(function() { var $this = $(this); var toOpen = $this.hasClass("open"); $('h4').removeClass("open").addClass("closed"); //Toggle icon if (!toOpen) { $this.removeClass("closed").addClass("open"); } //Expand or collapse this panel $this.next().slideToggle('fast') //Hide the other panels $(".pub-accordion-content").not($this.next()).slideUp('fast'); }); }); 
 #pub-accordion { padding: 24px; } #pub-accordion h4:first-child { border-top: 1px solid #ccc; } #pub-accordion h4 { border-bottom: 1px solid #ccc; color: #00539f; font-size: 1.6em; margin: 0; padding: 16px 0 16px 33px; cursor: pointer; } #pub-accordion .closed { background: url(http://www.dcholloway.co.uk/codepen/primary-collapse-icon.png) no-repeat 0 13px; } #pub-accordion .open { background: url(http://www.dcholloway.co.uk/codepen/primary-expand-icon.png) no-repeat 0 13px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <!-- Size Guide - - - - - - - - - - - - - - - - --> <div class="row row__im impage--no-margin"> <div class="page"> <div class="row"> <div class="s-100 m1-100 m2-100 l-100"> <div id="pub-accordion"> <h4 class="pub-accordion-toggle closed">Boys size guide</h4> <div class="pub-accordion-content default"> <p>Lorem ipsum dolor sit amet mauris eu turpis.</p> </div> <h4 class="pub-accordion-toggle closed">Girls size guide</h4> <div class="pub-accordion-content"> <p>Lorem ipsum dolor sit amet mauris eu turpis.</p> </div> <h4 class="pub-accordion-toggle closed">Boys plus fit size guide</h4> <div class="pub-accordion-content"> <p>Vivamus facilisisnibh scelerisque laoreet.</p> </div> <h4 class="pub-accordion-toggle closed">Girls plus fit size guide</h4> <div class="pub-accordion-content"> <p>Vivamus facilisisnibh scelerisque laoreet.</p> </div> </div> </div> </div> </div> </div> 

You closed the panel but didn't replace the icon. 您关闭了面板,但没有替换图标。 I've adjusted the function at the bottom of the jQuery code. 我已经调整了jQuery代码底部的功能。

 $('.pub-accordion-content').hide(); $('#pub-accordion').find('.pub-accordion-toggle').click(function() { var $this = $(this); // Replace the icon $(".pub-accordion-toggle").removeClass("open"); //Hide the other panels $(".pub-accordion-content").not($this.next()).slideUp('fast'); //Toggle icon $this.toggleClass("open"); //Expand or collapse this panel $this.next().slideToggle('fast') }); 
 #pub-accordion { padding: 24px; } #pub-accordion h4:first-child { border-top: 1px solid #ccc; } #pub-accordion h4 { border-bottom: 1px solid #ccc; color: #00539f; font-size: 1.6em; margin: 0; padding: 16px 0 16px 33px; cursor: pointer; } #pub-accordion .closed { background: url(http://www.dcholloway.co.uk/codepen/primary-collapse-icon.png) no-repeat 0 13px; } #pub-accordion .open { background: url(http://www.dcholloway.co.uk/codepen/primary-expand-icon.png) no-repeat 0 13px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="row row__im impage--no-margin"> <div class="page"> <div class="row"> <div class="s-100 m1-100 m2-100 l-100"> <div id="pub-accordion"> <h4 class="pub-accordion-toggle closed">Boys size guide</h4> <div class="pub-accordion-content default"> <p>Lorem ipsum dolor sit amet mauris eu turpis.</p> </div> <h4 class="pub-accordion-toggle closed">Girls size guide</h4> <div class="pub-accordion-content"> <p>Lorem ipsum dolor sit amet mauris eu turpis.</p> </div> <h4 class="pub-accordion-toggle closed">Boys plus fit size guide</h4> <div class="pub-accordion-content"> <p>Vivamus facilisisnibh scelerisque laoreet.</p> </div> <h4 class="pub-accordion-toggle closed">Girls plus fit size guide</h4> <div class="pub-accordion-content"> <p>Vivamus facilisisnibh scelerisque laoreet.</p> </div> </div> </div> </div> </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM