Reputation: 5
I'm using a jquery accordion with special functionality. In 99% of cases it functions just as it should. I have a use case where I need to open the top/first accordion on page load while maintaining the functionality (in this case plus/minus with corresponding state open or close using font-awesome).
I can get the accordion to open by hard coding class "open" and "display: block;". By doing so, it screws up my font awesome state.
HTML
<div class="accordion-container">
<a class="accordion-toggle" href="#"><span class="toggle-head"><h2 class="t-h2">Web Ready Lorem Ipsum</h2>
</span><span class="toggle-icon"><i class="fa fa-plus"></i></span></a>
<div class="accordion-content">
<p>The images below provide examples of safe sleep environments that follow the safe sleep strategies explained in Safe to Sleep<sup>®</sup> materials.</p>
<p>These low-resolution images are available for your convenience. If you choose to use the images, you are agreeing to: </p>
<ul class="sts-bullet">
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
<li>Duis malesuada purus sit amet tellus semper tempus.</li>
<li>Etiam iaculis est ac erat mollis, vitae vulputate ante sagittis.</li>
<li>Mauris interdum nulla interdum libero hendrerit interdum.</li>
<li>Cras aliquet arcu vitae mattis congue.Cras aliquet arcu vitae mattis congue.</li>
<li>Vivamus bibendum arcu vel enim luctus, eu dignissim erat efficitur.</li>
</ul>
</div>
</div>
<div class="accordion-container">
<a class="accordion-toggle" href="#"><span class="toggle-head"><h2 class="t-h2">Web-Ready Lorem Ipsum is simply dummy text 2</h2>
</span><span class="toggle-icon"><i class="fa fa-plus"></i></span></a>
<div class="accordion-content">
<p>The images below provide examples of safe sleep environments that follow the safe sleep strategies explained in Safe to Sleep<sup>®</sup> materials.</p>
<p>These low-resolution images are available for your convenience. If you choose to use the images, you are agreeing to: </p>
<ul class="sts-bullet">
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
<li>Duis malesuada purus sit amet tellus semper tempus.</li>
<li>Etiam iaculis est ac erat mollis, vitae vulputate ante sagittis.</li>
<li>Mauris interdum nulla interdum libero hendrerit interdum.</li>
<li>Cras aliquet arcu vitae mattis congue.Cras aliquet arcu vitae mattis congue.</li>
<li>Vivamus bibendum arcu vel enim luctus, eu dignissim erat efficitur.</li>
</ul>
</div>
</div>
<div class="accordion-container">
<a class="accordion-toggle" href="#"><span class="toggle-head"><h2 class="t-h2">Web-Ready Lorem Ipsum is simply dummy text 3</h2>
</span><span class="toggle-icon"><i class="fa fa-plus"></i></span></a>
<div class="accordion-content">
<p>The images below provide examples of safe sleep environments that follow the safe sleep strategies explained in Safe to Sleep<sup>®</sup> materials.</p>
<p>These low-resolution images are available for your convenience. If you choose to use the images, you are agreeing to: </p>
<ul class="sts-bullet">
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
<li>Duis malesuada purus sit amet tellus semper tempus.</li>
<li>Etiam iaculis est ac erat mollis, vitae vulputate ante sagittis.</li>
<li>Mauris interdum nulla interdum libero hendrerit interdum.</li>
<li>Cras aliquet arcu vitae mattis congue.Cras aliquet arcu vitae mattis congue.</li>
<li>Vivamus bibendum arcu vel enim luctus, eu dignissim erat efficitur.</li>
</ul>
</div>
</div>
CSS
/*ACCORDION*/
.accordion-container {
width: 100%;
margin-top: 1em;
/*clear: both;*/
}
.toggle-head {
display: block;
max-width: 95%;
font-weight: 700;
}
.accordion-toggle {
position: relative;
display: block;
padding: 10px;
font-size: 1em;
font-weight: 400;
background: #f3f3f3;
color: #000 !important;
text-decoration: none !important;
}
.accordion-toggle.open {
background: #f3f3f3;
color: #fff;
}
.accordion-toggle:hover {
background: #E8E8E8;
}
.accordion-toggle span.toggle-icon {
position: absolute;
right: .5em;
font-size: 1.5em;
color: #65308a;
top: .5em;
}
.accordion-content {
display: none;
padding: 20px;
overflow: auto;
background-color: transparent;
}
jQuery
$(document).ready(function() {
$('.accordion-toggle').on('click', function(event) {
event.preventDefault();
// create accordion variables
var accordion = $(this);
var accordionContent = accordion.next('.accordion-content');
var accordionToggleIcon = $(this).children('.toggle-icon');
// toggle accordion link open class
accordion.toggleClass("open");
// toggle accordion content
accordionContent.slideToggle(250);
// change plus/minus icon
if (accordion.hasClass("open")) {
accordionToggleIcon.html("<i class='fa fa-minus'></i>");
} else {
accordionToggleIcon.html("<i class='fa fa-plus'></i>");
}
});
});
Upvotes: 0
Views: 1844
Reputation: 178
You can force the click so you can reuse your function. Add an id to the accordion you want to open...
<a class="accordion-toggle" id="ac1" .... > </a>
Then at the end of the script, add
$('#ac1').click();
You can also trigger a click with trigger() method. Using trigger() instead of click() will eliminate ambiguous calls.
$('#ac1').trigger('click');
Upvotes: 2
Reputation: 10598
class="toggle-head">Web Ready Lorem Ipsum -
name all the elements that are going to be effected as shown above and then do this at the end of the
$("#oLink").addClass("open"); // link name
$("#oLinkDiv").show(); //div name you want to show
$("#oLinkSpan").html(''); //span that you want to change to - sign
$("#oLinkSpan").html('<i class="fa fa-minus"></i>'); //chaging sing to minus
$(document).ready(function() {
check the image for details of your fiddle
Upvotes: 0
Reputation: 440
Just trigger click on the first element:
$(document).ready(function() {
var toggles = $('.accordion-toggle')
toggles.on('click', function(event) {
event.preventDefault();
// create accordion variables
var accordion = $(this);
var accordionContent = accordion.next('.accordion-content');
//// ...............
});
// Fire click! /////////////////
toggles.first().trigger('click');
/////////////////////////////////
});
Upvotes: 1