Accordion Widgetversion added: 1.0
Description: Convert a pair of headers and content panels into an accordion.
The markup of your accordion container needs pairs of headers and content panels:
<div id="accordion"> <h3>First header</h3> <div>First content panel</div> <h3>Second header</h3> <div>Second content panel</div> </div>
Accordions support arbitrary markup, but each content panel must always be the next sibling after its associated header. See the header option for information on how to use custom markup structures.
The panels can be activated programmatically by setting the active option.
Keyboard interaction
When focus is on a header, the following key commands are available:
-
UP/LEFT: Move focus to the previous header. If on first header, moves focus to last header. -
DOWN/RIGHT: Move focus to the next header. If on last header, moves focus to first header. -
HOME: Move focus to the first header. -
END: Move focus to the last header. -
SPACE/ENTER: Activate panel associated with focused header.
When focus is in a panel:
-
CTRL+UP: Move focus to associated header.
Theming
The accordion widget uses the jQuery UI CSS framework to style its look and feel. If accordion specific styling is needed, the following CSS class names can be used for overrides or as keys for the classes option:
-
ui-accordion: The outer container of the accordion.-
ui-accordion-header: The headers of the accordion. The active header will additionally have aui-accordion-header-activeclass, the inactive headers will have aui-accordion-header-collapsedclass. The headers will also have aui-accordion-iconsclass if they containicons.-
ui-accordion-header-icon: Icon elements within each accordion header.
-
-
ui-accordion-content: The content panels of the accordion. The active content panel will additionally have aui-accordion-content-activeclass.
-
Dependencies
- UI Core
- Widget Factory
- Effects Core (optional; for use with the
animateoption)
Additional Notes:
- This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
Options
active
0 - Boolean: Setting
activetofalsewill collapse all panels. This requires thecollapsibleoption to betrue. - Integer: The zero-based index of the panel that is active (open). A negative value selects panels going backward from the last panel.
Initialize the accordion with the active option specified:
$( ".selector" ).accordion({
active: 2
}); Get or set the active option, after initialization:
// Getter var active = $( ".selector" ).accordion( "option", "active" ); // Setter $( ".selector" ).accordion( "option", "active", 2 );
animate
{} - Boolean: A value of
falsewill disable animations. - Number: Duration in milliseconds with default easing.
- String: Name of easing to use with default duration.
- Object: An object containing
easinganddurationproperties to configure animations.- Can also contain a
downproperty with any of the above options. - "Down" animations occur when the panel being activated has a lower index than the currently active panel.
- Can also contain a
Initialize the accordion with the animate option specified:
$( ".selector" ).accordion({
animate: 200
}); Get or set the animate option, after initialization:
// Getter var animate = $( ".selector" ).accordion( "option", "animate" ); // Setter $( ".selector" ).accordion( "option", "animate", 200 );
classes
{
"ui-accordion-header": "ui-corner-top",
"ui-accordion-header-collapsed": "ui-corner-all",
"ui-accordion-content": "ui-corner-bottom"
} Specify additional classes to add to the widget's elements. Any of classes specified in the Theming section can be used as keys to override their value. To learn more about this option, check out the learn article about the classes option.
Initialize the accordion with the classes option specified, changing the theming for the ui-accordion class:
$( ".selector" ).accordion({
classes: {
"ui-accordion": "highlight"
}
}); Get or set a property of the classes option, after initialization, here reading and changing the theming for the ui-accordion class:
// Getter var themeClass = $( ".selector" ).accordion( "option", "classes.ui-accordion" ); // Setter $( ".selector" ).accordion( "option", "classes.ui-accordion", "highlight" );
collapsible
false Initialize the accordion with the collapsible option specified:
$( ".selector" ).accordion({
collapsible: true
}); Get or set the collapsible option, after initialization:
// Getter var collapsible = $( ".selector" ).accordion( "option", "collapsible" ); // Setter $( ".selector" ).accordion( "option", "collapsible", true );
disabled
false true.Initialize the accordion with the disabled option specified:
$( ".selector" ).accordion({
disabled: true
}); Get or set the disabled option, after initialization:
// Getter var disabled = $( ".selector" ).accordion( "option", "disabled" ); // Setter $( ".selector" ).accordion( "option", "disabled", true );
event
"click" Initialize the accordion with the event option specified:
$( ".selector" ).accordion({
event: "mouseover"
}); Get or set the event option, after initialization:
// Getter var event = $( ".selector" ).accordion( "option", "event" ); // Setter $( ".selector" ).accordion( "option", "event", "mouseover" );
header
"> li > :first-child,> :not(li):even" Selector for the header element, applied via .find() on the main accordion element. Content panels must be the sibling immediately after their associated headers.
Initialize the accordion with the header option specified:
$( ".selector" ).accordion({
header: "h3"
}); Get or set the header option, after initialization:
// Getter var header = $( ".selector" ).accordion( "option", "header" ); // Setter $( ".selector" ).accordion( "option", "header", "h3" );
heightStyle
"auto" Controls the height of the accordion and each panel. Possible values:
-
"auto": All panels will be set to the height of the tallest panel. -
"fill": Expand to the available height based on the accordion's parent height. -
"content": Each panel will be only as tall as its content.
Initialize the accordion with the heightStyle option specified:
$( ".selector" ).accordion({
heightStyle: "fill"
}); Get or set the heightStyle option, after initialization:
// Getter var heightStyle = $( ".selector" ).accordion( "option", "heightStyle" ); // Setter $( ".selector" ).accordion( "option", "heightStyle", "fill" );
icons
{
"header": "ui-icon-triangle-1-e",
"activeHeader": "ui-icon-triangle-1-s"
} Icons to use for headers, matching an icon provided by the jQuery UI CSS Framework. Set to false to have no icons displayed.
- header (string, default: "ui-icon-triangle-1-e")
- activeHeader (string, default: "ui-icon-triangle-1-s")
Initialize the accordion with the icons option specified:
$( ".selector" ).accordion({
icons: { "header": "ui-icon-plus", "activeHeader": "ui-icon-minus" }
}); Get or set the icons option, after initialization:
// Getter
var icons = $( ".selector" ).accordion( "option", "icons" );
// Setter
$( ".selector" ).accordion( "option", "icons", { "header": "ui-icon-plus", "activeHeader": "ui-icon-minus" } ); Methods
destroy()Returns: jQuery (plugin only)
- This method does not accept any arguments.
Invoke the destroy method:
$( ".selector" ).accordion( "destroy" );
disable()Returns: jQuery (plugin only)
- This method does not accept any arguments.
Invoke the disable method:
$( ".selector" ).accordion( "disable" );
enable()Returns: jQuery (plugin only)
- This method does not accept any arguments.
Invoke the enable method:
$( ".selector" ).accordion( "enable" );
instance()Returns: Object
Retrieves the accordion's instance object. If the element does not have an associated instance, undefined is returned.
Unlike other widget methods, instance() is safe to call on any element after the accordion plugin has loaded.
- This method does not accept any arguments.
Invoke the instance method:
$( ".selector" ).accordion( "instance" );
option( optionName )Returns: Object
Gets the value currently associated with the specified optionName.
Note: For options that have objects as their value, you can get the value of a specific key by using dot notation. For example, "foo.bar" would get the value of the bar property on the foo option.
- optionNameType: StringThe name of the option to get.
Invoke the method:
var isDisabled = $( ".selector" ).accordion( "option", "disabled" );
option()Returns: PlainObject
- This signature does not accept any arguments.
Invoke the method:
var options = $( ".selector" ).accordion( "option" );
option( optionName, value )Returns: jQuery (plugin only)
Sets the value of the accordion option associated with the specified optionName.
Note: For options that have objects as their value, you can set the value of just one property by using dot notation for optionName. For example, "foo.bar" would update only the bar property of the foo option.
- optionNameType: StringThe name of the option to set.
- valueType: ObjectA value to set for the option.
Invoke the method:
$( ".selector" ).accordion( "option", "disabled", true );
option( options )Returns: jQuery (plugin only)
- optionsType: ObjectA map of option-value pairs to set.
Invoke the method:
$( ".selector" ).accordion( "option", { disabled: true } ); refresh()Returns: jQuery (plugin only)
heightStyle option.- This method does not accept any arguments.
Invoke the refresh method:
$( ".selector" ).accordion( "refresh" );
widget()Returns: jQuery
jQuery object containing the accordion. - This method does not accept any arguments.
Invoke the widget method:
var widget = $( ".selector" ).accordion( "widget" );
Events
activate( event, ui )Type: accordionactivate
Triggered after a panel has been activated (after animation completes). If the accordion was previously collapsed, ui.oldHeader and ui.oldPanel will be empty jQuery objects. If the accordion is collapsing, ui.newHeader and ui.newPanel will be empty jQuery objects.
activate event is only fired on panel activation, it is not fired for the initial panel when the accordion widget is created. If you need a hook for widget creation use the create event.Initialize the accordion with the activate callback specified:
$( ".selector" ).accordion({
activate: function( event, ui ) {}
}); Bind an event listener to the accordionactivate event:
$( ".selector" ).on( "accordionactivate", function( event, ui ) {} ); beforeActivate( event, ui )Type: accordionbeforeactivate
ui.oldHeader and ui.oldPanel will be empty jQuery objects. If the accordion is collapsing, ui.newHeader and ui.newPanel will be empty jQuery objects.Initialize the accordion with the beforeActivate callback specified:
$( ".selector" ).accordion({
beforeActivate: function( event, ui ) {}
}); Bind an event listener to the accordionbeforeactivate event:
$( ".selector" ).on( "accordionbeforeactivate", function( event, ui ) {} ); create( event, ui )Type: accordioncreate
ui.header and ui.panel will be empty jQuery objects.Initialize the accordion with the create callback specified:
$( ".selector" ).accordion({
create: function( event, ui ) {}
}); Bind an event listener to the accordioncreate event:
$( ".selector" ).on( "accordioncreate", function( event, ui ) {} ); Example:
A simple jQuery UI Accordion
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>accordion demo</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.12.4.js"></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<div id="accordion">
<h3>Section 1</h3>
<div>
<p>Mauris mauris ante, blandit et, ultrices a, suscipit eget.
Integer ut neque. Vivamus nisi metus, molestie vel, gravida in,
condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros.
Nam mi. Proin viverra leo ut odio.</p>
</div>
<h3>Section 2</h3>
<div>
<p>Sed non urna. Phasellus eu ligula. Vestibulum sit amet purus.
Vivamus hendrerit, dolor aliquet laoreet, mauris turpis velit,
faucibus interdum tellus libero ac justo.</p>
</div>
<h3>Section 3</h3>
<div>
<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus.
Quisque lobortis.Phasellus pellentesque purus in massa.</p>
<ul>
<li>List item one</li>
<li>List item two</li>
<li>List item three</li>
</ul>
</div>
</div>
<script>
$( "#accordion" ).accordion();
</script>
</body>
</html>