## Menu Widget version added: 1.9

Description: Themeable menu with mouse and keyboard interactions for navigation.

## QuickNavExamples

A menu can be created from any valid markup as long as the elements have a strict parent/child relationship and each menu item has an anchor. The most commonly used element is the unordered list (`<ul>`):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
    <ul id="menu">  <li><a href="#">Item 1</a></li>  <li><a href="#">Item 2</a></li>  <li><a href="#">Item 3</a>    <ul>      <li><a href="#">Item 3-1</a></li>      <li><a href="#">Item 3-2</a></li>      <li><a href="#">Item 3-3</a></li>      <li><a href="#">Item 3-4</a></li>      <li><a href="#">Item 3-5</a></li>    </ul>  </li>  <li><a href="#">Item 4</a></li>  <li><a href="#">Item 5</a></li></ul>

If you use a structure other than `<ul>`/`<li>`, including using the same element for the menu and the menu items, use the `menus` option to specify a way to differentiate the two elements, e.g., `menus: "div.menuElement"`.

Any menu item can be disabled by adding the `ui-state-disabled` class to that element.

### Icons

To add icons to the menu, include them in the markup:

1 2 3 |
    <ul id="menu">  <li><a href="#"><span class="ui-icon ui-icon-disk"></span>Save</a></li></ul>

Menu automatically adds the necessary padding to items without icons.

### Dividers

Divider elements can be created by including unlinked menu items that contain only spaces and/or dashes:

1 2 3 4 5 |
    <ul id="menu">  <li><a href="#">Item 1</a></li>  <li>-</li>  <li><a href="#">Item 2</a></li></ul>

### Keyboard interaction

- ENTER/SPACE: Invoke the focused menu item's action, which may be opening a submenu.
- UP: Move focus to the previous menu item.
- DOWN: Move focus to the next menu item.
- RIGHT: Open the submenu, if available.
- LEFT: Close the current submenu and move focus to the parent menu item. If not in a submenu, do nothing.
- ESCAPE: Close the current submenu and move focus to the parent menu item. If not in a submenu, do nothing.

Typing a letter moves focus to the first item whose title starts with that character. Repeating the same character cycles through matching items. Typing more characters within the one second timer matches those characters.

Disabled items can receive keyboard focus, but do not allow any other interaction.

### Theming

The menu widget uses the jQuery UI CSS framework to style its look and feel. If menu specific styling is needed, the following CSS class names can be used:

- `ui-menu`: The outer container of the menu. This element will additionally have a `ui-menu-icons` class if the menu contains icons.
  - `ui-menu-item`: The container for individual menu items.
    - `ui-menu-icon`: The submenu icons set via the `icons` option.
  - `ui-menu-divider`: Divider elements between menu items.

### Dependencies

- UI Core
- Widget Factory
- Position

### 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

### disabledType: Boolean

Default: `false`
Disables the menu if set to `true`.
Code examples:

Initialize the menu with the `disabled` option specified:

1 |
    $( ".selector" ).menu({ disabled: true });

Get or set the `disabled` option, after initialization:

1 2 3 4 5 |
    // gettervar disabled = $( ".selector" ).menu( "option", "disabled" ); // setter$( ".selector" ).menu( "option", "disabled", true );

### iconsType: Object

Default: `{ submenu: "ui-icon-carat-1-e" }`
Icons to use for submenus, matching an icon provided by the jQuery UI CSS Framework.

- submenu (string, default: "ui-icon-carat-1-e")

Code examples:

Initialize the menu with the `icons` option specified:

1 |
    $( ".selector" ).menu({ icons: { submenu: "ui-icon-circle-triangle-e" } });

Get or set the `icons` option, after initialization:

1 2 3 4 5 |
    // gettervar icons = $( ".selector" ).menu( "option", "icons" ); // setter$( ".selector" ).menu( "option", "icons", { submenu: "ui-icon-circle-triangle-e" } );

### menusType: String

Default: `"ul"`

Selector for the elements that serve as the menu container, including sub-menus.

Note: The `menus` option should not be changed after initialization. Existing submenus will not be updated.
Code examples:

Initialize the menu with the `menus` option specified:

1 |
    $( ".selector" ).menu({ menus: "div" });

Get the `menus` option, after initialization:

1 2 |
    // gettervar menus = $( ".selector" ).menu( "option", "menus" );

### positionType: Object

Default: `{ my: "left top", at: "right top" }`
Identifies the position of submenus in relation to the associated parent menu item. The `of` option defaults to the parent menu item, but you can specify another element to position against. You can refer to the jQuery UI Position utility for more details about the various options.
Code examples:

Initialize the menu with the `position` option specified:

1 |
    $( ".selector" ).menu({ position: { my: "left top", at: "right-5 top+5" } });

Get or set the `position` option, after initialization:

1 2 3 4 5 |
    // gettervar position = $( ".selector" ).menu( "option", "position" ); // setter$( ".selector" ).menu( "option", "position", { my: "left top", at: "right-5 top+5" } );

### roleType: String

Default: `"menu"`

Customize the ARIA roles used for the menu and menu items. The default uses `"menuitem"` for items. Setting the `role` option to `"listbox"` will use `"option"` for items. If set to `null`, no roles will be set, which is useful if the menu is being controlled by another element that is maintaining focus.

Note: The `role` option should not be changed after initialization. Existing (sub)menus and menu items will not be updated.
Code examples:

Initialize the menu with the `role` option specified:

1 |
    $( ".selector" ).menu({ role: null });

Get the `role` option, after initialization:

1 2 |
    // gettervar role = $( ".selector" ).menu( "option", "role" );

## Methods

### blur( [event ] )Returns: jQuery (plugin only)

Removes focus from a menu, resets any active element styles and triggers the menu's `blur` event.

- event
  Type: Event
  What triggered the menu to blur.

Code examples:

Invoke the blur method:

1 |
    $( ".selector" ).menu( "blur" );

### collapse( [event ] )Returns: jQuery (plugin only)

Closes the currently active sub-menu.

- event
  Type: Event
  What triggered the menu to collapse.

Code examples:

Invoke the collapse method:

1 |
    $( ".selector" ).menu( "collapse" );

### collapseAll( [event ] [, all ] )Returns: jQuery (plugin only)

Closes all open sub-menus.

- event
  Type: Event
  What triggered the menu to collapse.
- all
  Type: Boolean
  Indicates whether all sub-menus should be closed or only sub-menus below and including the menu that is or contains the target of the triggering event.

Code examples:

Invoke the collapseAll method:

1 |
    $( ".selector" ).menu( "collapseAll", null, true );

### destroy()Returns: jQuery (plugin only)

Removes the menu functionality completely. This will return the element back to its pre-init state.

- This method does not accept any arguments.

Code examples:

Invoke the destroy method:

1 |
    $( ".selector" ).menu( "destroy" );

### disable()Returns: jQuery (plugin only)

Disables the menu.

- This method does not accept any arguments.

Code examples:

Invoke the disable method:

1 |
    $( ".selector" ).menu( "disable" );

### enable()Returns: jQuery (plugin only)

Enables the menu.

- This method does not accept any arguments.

Code examples:

Invoke the enable method:

1 |
    $( ".selector" ).menu( "enable" );

### expand( [event ] )Returns: jQuery (plugin only)

Opens the sub-menu below the currently active item, if one exists.

- event
  Type: Event
  What triggered the menu to expand.

Code examples:

Invoke the expand method:

1 |
    $( ".selector" ).menu( "expand" );

### focus( [event ], item )Returns: jQuery (plugin only)

Activates a particular menu item, begins opening any sub-menu if present and triggers the menu's `focus` event.

- event
  Type: Event
  What triggered the menu item to gain focus.
- item
  Type: jQuery
  The menu item to focus/activate.

Code examples:

Invoke the focus method:

1 |
    $( ".selector" ).menu( "focus", null, menu.find( ".ui-menu-item:last" ) );

### isFirstItem()Returns: jQuery (plugin only)

Returns a boolean value stating whether or not the currently active item is the first item in the menu.

- This method does not accept any arguments.

Code examples:

Invoke the isFirstItem method:

1 |
    var firstItem = $( ".selector" ).menu( "isFirstItem" );

### isLastItem()Returns: jQuery (plugin only)

Returns a boolean value stating whether or not the currently active item is the last item in the menu.

- This method does not accept any arguments.

Code examples:

Invoke the isLastItem method:

1 |
    var lastItem = $( ".selector" ).menu( "isLastItem" );

### next( [event ] )Returns: jQuery (plugin only)

Moves active state to next menu item.

- event
  Type: Event
  What triggered the focus to move.

Code examples:

Invoke the next method:

1 |
    $( ".selector" ).menu( "next" );

### nextPage( [event ] )Returns: jQuery (plugin only)

Moves active state to first menu item below the bottom of a scrollable menu or the last item if not scrollable.

- event
  Type: Event
  What triggered the focus to move.

Code examples:

Invoke the nextPage method:

1 |
    $( ".selector" ).menu( "nextPage" );

### option( optionName )Returns: Object

Gets the value currently associated with the specified `optionName`.

- optionName
  Type: String
  The name of the option to get.

Code examples:

Invoke the method:

1 |
    var isDisabled = $( ".selector" ).menu( "option", "disabled" );

### option()Returns: PlainObject

Gets an object containing key/value pairs representing the current menu options hash.

- This signature does not accept any arguments.

Code examples:

Invoke the method:

1 |
    var options = $( ".selector" ).menu( "option" );

### option( optionName, value )Returns: jQuery (plugin only)

Sets the value of the menu option associated with the specified `optionName`.

- optionName
  Type: String
  The name of the option to set.
- value
  Type: Object
  A value to set for the option.

Code examples:

Invoke the method:

1 |
    $( ".selector" ).menu( "option", "disabled", true );

### option( options )Returns: jQuery (plugin only)

Sets one or more options for the menu.

- options
  Type: Object
  A map of option-value pairs to set.

Code examples:

Invoke the method:

1 |
    $( ".selector" ).menu( "option", { disabled: true } );

### previous( [event ] )Returns: jQuery (plugin only)

Moves active state to previous menu item.

- event
  Type: Event
  What triggered the focus to move.

Code examples:

Invoke the previous method:

1 |
    $( ".selector" ).menu( "previous" );

### previousPage( [event ] )Returns: jQuery (plugin only)

Moves active state to first menu item above the top of a scrollable menu or the first item if not scrollable.

- event
  Type: Event
  What triggered the focus to move.

Code examples:

Invoke the previousPage method:

1 |
    $( ".selector" ).menu( "previousPage" );

### refresh()Returns: jQuery (plugin only)

Initializes sub-menus and menu items that have not already been initialized. New menu items, including sub-menus can be added to the menu or all of the contents of the menu can be replaced and then initialized with the `refresh()` method.

- This method does not accept any arguments.

Code examples:

Invoke the refresh method:

1 |
    $( ".selector" ).menu( "refresh" );

### select( [event ] )Returns: jQuery (plugin only)

Selects the currently active menu item, collapses all sub-menus and triggers the menu's `select` event.

- event
  Type: Event
  What triggered the selection.

Code examples:

Invoke the select method:

1 |
    $( ".selector" ).menu( "select" );

### widget()Returns: jQuery

Returns a `jQuery` object containing the menu.

- This method does not accept any arguments.

Code examples:

Invoke the widget method:

1 |
    var widget = $( ".selector" ).menu( "widget" );

## Events

### blur( event, ui )Type: `menublur`

Triggered when the menu loses focus.

- event
  Type: Event
- ui
  Type: Object
  - item
    Type: jQuery
    The currently active menu item.

Code examples:

Initialize the menu with the blur callback specified:

1 2 3 |
    $( ".selector" ).menu({  blur: function( event, ui ) {}});

Bind an event listener to the menublur event:

1 |
    $( ".selector" ).on( "menublur", function( event, ui ) {} );

### create( event, ui )Type: `menucreate`

Triggered when the menu is created.

- event
  Type: Event
- ui
  Type: Object

Note: The `ui` object is empty but included for consistency with other events.

Code examples:

Initialize the menu with the create callback specified:

1 2 3 |
    $( ".selector" ).menu({  create: function( event, ui ) {}});

Bind an event listener to the menucreate event:

1 |
    $( ".selector" ).on( "menucreate", function( event, ui ) {} );

### focus( event, ui )Type: `menufocus`

Triggered when a menu gains focus or when any menu item is activated.

- event
  Type: Event
- ui
  Type: Object
  - item
    Type: jQuery
    The currently active menu item.

Code examples:

Initialize the menu with the focus callback specified:

1 2 3 |
    $( ".selector" ).menu({  focus: function( event, ui ) {}});

Bind an event listener to the menufocus event:

1 |
    $( ".selector" ).on( "menufocus", function( event, ui ) {} );

### select( event, ui )Type: `menuselect`

Triggered when a menu item is selected.

- event
  Type: Event
- ui
  Type: Object
  - item
    Type: jQuery
    The currently active menu item.

Code examples:

Initialize the menu with the select callback specified:

1 2 3 |
    $( ".selector" ).menu({  select: function( event, ui ) {}});

Bind an event listener to the menuselect event:

1 |
    $( ".selector" ).on( "menuselect", function( event, ui ) {} );

## Example:

#### A simple jQuery UI Menu

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
    <!doctype html><html lang="en"><head>  <meta charset="utf-8">  <title>menu demo</title>  <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">  <style>  .ui-menu {    width: 200px;  }  </style>  <script src="//code.jquery.com/jquery-1.10.2.js"></script>  <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script></head><body> <ul id="menu">  <li><a href="#">Item 1</a></li>  <li><a href="#">Item 2</a></li>  <li><a href="#">Item 3</a>    <ul>      <li><a href="#">Item 3-1</a></li>      <li><a href="#">Item 3-2</a></li>      <li><a href="#">Item 3-3</a></li>      <li><a href="#">Item 3-4</a></li>      <li><a href="#">Item 3-5</a></li>    </ul>  </li>  <li><a href="#">Item 4</a></li>  <li><a href="#">Item 5</a></li></ul> <script>$( "#menu" ).menu();</script> </body></html>

#### Demo: