jQuery – Accordion
If you’ve been using the MS-AJAX Accordion control, stop it right now!
Seriously. Once I show you how easy the jQuery version is, you’ll want to drop it. Shoot! You may even want to go to the trouble of replacing the MS-AJAX Accordion control in the code you’ve already written.
If you’ve been to the jQuery site, you’ll see that they say the way to set up your HTML is to write code that looks something like this
<div class="accordion"> <div><a href="#">Header Text One</a> <div>Content for <br />the first section</div></div> <div><a href="#">Header Text Two</a> <div>Content for <br />the second section</div></div> </div>
But if you look at the demo code, you’ll see they did something entirely different.
This is what your HTML should look like for a simple accordion. Make sure you are sucking in the theme stylesheet or nothing will work.
<div class="accordion"> <h3><a href="#">Header Text One</a></h3> <div>Content for <br /> the first section</div> <h3><a href="#">Header Text Two</a></h3> <div>Content for <br />the second section</div> </div>
Note the two major differences. You don’t want to wrap each section with a DIV and the header needs to be a combination of h3 and an anchor tag.
To turn this HTML into an accordion, all you need to do is use the following jQuery script
$(function() { $(".accordion").accordion(); });
Which should give you an accordion that looks something like this

Since I didn’t style any of my content, it looks how it looks.
There are several options that you can pass in when you create the accordion in your jQuery. You can, for example, specify which pane to display first. If I wanted header two to be expanded, I would use
$(function() { $(".accordion").accordion({active:1}); });
If I want to change how the panes animate, I can pass in an animated option.
If you want to use something other than the h3 tag for your header, you can specify it with the header option.
This is another place where the documentation seems to be goofed up right now. The default for this seems to be h3. If we wanted to use the anchor tag instead we’d pass in
$(function() { $(".accordion").accordion({header: 'a'}); });
If you do change this, you’ll want to make sure you style the new header as a block level element–otherwise the header won’t span the width of the accordion.

You may also want to have the panels expand when the mouse rolls over them. You can do this with the MS-AJAX control and it should be no surprise that you can do that with the jQuery accordion as well. In fact, you could specify any event.
All you need to do is pass in the event option.
$(function() { $(".accordion").accordion({event: 'mouseover'}); });
As with other jQuery controls, the accordion has an event that will let you know when something has changed. This fires once any animations have completed. The function that gets called takes two parameters–the event and an object that has four properties hanging off of it: newHeader, oldHeader, newContent, and oldContent. So you can take control at that point. Perhaps you might use this to load the new content dynamically.
Other post in jQuery
- jQuery - The Man, The Myth, The Legend - October 8th, 2008
- Getting started with jQuery and ASP.NET - October 15th, 2008
- jQuery Simple Selectors - October 28th, 2008
- jQuery Selectors - Looks just like CSS - November 6th, 2008
- jQuery Looks like XPath - November 12th, 2008
- jQuery - class manipulation - November 19th, 2008
- jQuery - Events - December 2nd, 2008
- jQuery - Positioning Elements - January 6th, 2009
- AjaxToolKit TabControl Disabled Tab - January 12th, 2009
- jQuery, JSON, and ASP.NET - January 15th, 2009
- jQuery - Retrieving HTML Fragments - January 22nd, 2009
- jQuery GUI - Drag - February 3rd, 2009
- jQuery - Drop - February 12th, 2009
- jQuery UI - Resizable w/ ASP.NET Themes - February 18th, 2009
- jQuery, bgiframe and IE6 z-order hacks - February 19th, 2009
- jQuery - Sliders (scrollbars to the rest of us) - March 4th, 2009
- jQuery - Using Slider as a Scrollbar - March 12th, 2009
- jQuery - Auto Scrolling the Slider - March 23rd, 2009
- jQuery – Accordion - May 6th, 2009
- CustomValidationControl and jQuery - May 11th, 2009
- Mixing ASP.NET, jQuery and JSON - May 12th, 2009
- jQuery Progressbar - May 20th, 2009
- jQuery – Dialog - June 2nd, 2009
- Does jQuery Make Us Lazy? - June 18th, 2009
- jQuery Dialog – With Validation Controls - June 25th, 2009
- jQuery – Date Picker - July 2nd, 2009
- jQuery Splitter - July 21st, 2009
- jQuery Expand/Collapse Using Head Tags - October 15th, 2009
- Flash to jQuery - November 30th, 2009
- jQuery, Each() and Async Gets - December 2nd, 2009
- jQuery and ASP.NET UpdatePanel - January 6th, 2010
- AddThis.com From E-Mail - May 25th, 2011
- jQuery - Creating Plug-ins - June 4th, 2012
- jQuery - Calling Your Own Functions - July 24th, 2012
- jQuery Tabs - October 2nd, 2012
- jQuery - Explaining Last Week's Code - October 16th, 2012
- jQuery – Modal Dialog - November 20th, 2012
- Host jQuery at Google (with Intellisense support) - December 4th, 2012
- JQuery, Cufon, and Dynamic Content - January 1st, 2013
- jQuery - Loading Partial Content - January 29th, 2013




