## 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>`):

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

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

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

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

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

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

Get or set the disabled option, after initialization:

`// getter` `var` `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 defined by the jQuery UI CSS Framework.

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

Code examples:

Initialize the menu with the icons option specified:

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

Get or set the icons option, after initialization:

`// getter` `var` `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.
Code examples:

Initialize the menu with the menus option specified:

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

Get or set the menus option, after initialization:

`// getter` `var` `menus = $(` `".selector"` `).menu(` `"option"``,` `"menus"` `);` `// setter` `$(` `".selector"` `).menu(` `"option"``,` `"menus"``,` `"div"` `);`

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

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

Get or set the position option, after initialization:

`// getter` `var` `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.
Code examples:

Initialize the menu with the role option specified:

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

Get or set the role option, after initialization:

`// getter` `var` `role = $(` `".selector"` `).menu(` `"option"``,` `"role"` `);` `// setter` `$(` `".selector"` `).menu(` `"option"``,` `"role"``,` `null` `);`

## Methods

### blur( [event ] )

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:

`$(` `".selector"` `).menu(` `"blur"` `);`

### collapse( [event ] )

Closes the currently active sub-menu.

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

Code examples:

Invoke the collapse method:

`$(` `".selector"` `).menu(` `"collapse"` `);`

### collapseAll( [event ] [, all ] )

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:

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

### destroy()

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:

`$(` `".selector"` `).menu(` `"destroy"` `);`

### disable()

Disables the menu.

- This method does not accept any arguments.

Code examples:

Invoke the disable method:

`$(` `".selector"` `).menu(` `"disable"` `);`

### enable()

Enables the menu.

- This method does not accept any arguments.

Code examples:

Invoke the enable method:

`$(` `".selector"` `).menu(` `"enable"` `);`

### expand( [event ] )

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:

`$(` `".selector"` `).menu(` `"expand"` `);`

### focus( [event ], item )

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:

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

### isFirstItem()

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:

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

### isLastItem()

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:

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

### next( [event ] )

Moves active state to next menu item.

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

Code examples:

Invoke the next method:

`$(` `".selector"` `).menu(` `"next"` `);`

### nextPage( [event ] )

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:

`$(` `".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:

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

### option()Returns: PlainObject

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

- This method does not accept any arguments.

Code examples:

Invoke the method:

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

### option( optionName, value )

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:

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

### option( options )

Sets one or more options for the menu.

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

Code examples:

Invoke the method:

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

### previous( [event ] )

Moves active state to previous menu item.

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

Code examples:

Invoke the previous method:

`$(` `".selector"` `).menu(` `"previous"` `);`

### previousPage( [event ] )

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:

`$(` `".selector"` `).menu(` `"previousPage"` `);`

### refresh()

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:

`$(` `".selector"` `).menu(` `"refresh"` `);`

### select( [event ] )

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:

`$(` `".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:

`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:

`$(` `".selector"` `).menu({` `` `blur:` `function``( event, ui ) {}` `});`

Bind an event listener to the menublur event:

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

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

Triggered when the menu is created.

- event
  Type: Event
- ui
  Type: Object

Code examples:

Initialize the menu with the create callback specified:

`$(` `".selector"` `).menu({` `` `create:` `function``( event, ui ) {}` `});`

Bind an event listener to the menucreate event:

`$(` `".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:

`$(` `".selector"` `).menu({` `` `focus:` `function``( event, ui ) {}` `});`

Bind an event listener to the menufocus event:

`$(` `".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:

`$(` `".selector"` `).menu({` `` `select:` `function``( event, ui ) {}` `});`

Bind an event listener to the menuselect event:

`$(` `".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``=``"http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css"``>`
`` `<``style``>`
`` `.ui-menu {`
`` `width: 200px;`
`` `}`
`` `</``style``>`
`` `<``script` `src``=``"http://code.jquery.com/jquery-1.8.3.js"``></``script``>`
`` `<``script` `src``=``"http://code.jquery.com/ui/1.9.2/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: