mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
Menu: Look into submenus for uninitialized menu items. Fixes #8773 - Menu: refresh() doesn't refresh existing submenus.
This commit is contained in:
parent
8bdf0359bb
commit
8b3e570241
@ -60,6 +60,15 @@ test( "refresh", function() {
|
|||||||
equal( element.find( ".ui-menu-item" ).length, 5, "Incorrect number of menu items" );
|
equal( element.find( ".ui-menu-item" ).length, 5, "Incorrect number of menu items" );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test( "refresh submenu", function() {
|
||||||
|
expect( 2 );
|
||||||
|
var element = $( "#menu2" ).menu();
|
||||||
|
equal( element.find( "ul:first .ui-menu-item" ).length, 3 );
|
||||||
|
element.find( "ul" ).andSelf().append( "<li><a href=\"#\">New Item</a></li>" );
|
||||||
|
element.menu("refresh");
|
||||||
|
equal( element.find( "ul:first .ui-menu-item" ).length, 4 );
|
||||||
|
});
|
||||||
|
|
||||||
test( "widget", function() {
|
test( "widget", function() {
|
||||||
expect( 2 );
|
expect( 2 );
|
||||||
var element = $( "#menu1" ).menu(),
|
var element = $( "#menu1" ).menu(),
|
||||||
|
47
ui/jquery.ui.menu.js
vendored
47
ui/jquery.ui.menu.js
vendored
@ -277,21 +277,35 @@ $.widget( "ui.menu", {
|
|||||||
},
|
},
|
||||||
|
|
||||||
refresh: function() {
|
refresh: function() {
|
||||||
// Initialize nested menus
|
|
||||||
var menus,
|
var menus,
|
||||||
icon = this.options.icons.submenu,
|
icon = this.options.icons.submenu,
|
||||||
submenus = this.element.find( this.options.menus + ":not(.ui-menu)" )
|
submenus = this.element.find( this.options.menus );
|
||||||
.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
|
|
||||||
.hide()
|
// Initialize nested menus
|
||||||
.attr({
|
submenus.filter( ":not(.ui-menu)" )
|
||||||
role: this.options.role,
|
.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
|
||||||
"aria-hidden": "true",
|
.hide()
|
||||||
"aria-expanded": "false"
|
.attr({
|
||||||
});
|
role: this.options.role,
|
||||||
|
"aria-hidden": "true",
|
||||||
|
"aria-expanded": "false"
|
||||||
|
})
|
||||||
|
.each(function() {
|
||||||
|
var menu = $( this ),
|
||||||
|
item = menu.prev( "a" ),
|
||||||
|
submenuCarat = $( "<span>" )
|
||||||
|
.addClass( "ui-menu-icon ui-icon " + icon )
|
||||||
|
.data( "ui-menu-submenu-carat", true );
|
||||||
|
|
||||||
|
item
|
||||||
|
.attr( "aria-haspopup", "true" )
|
||||||
|
.prepend( submenuCarat );
|
||||||
|
menu.attr( "aria-labelledby", item.attr( "id" ) );
|
||||||
|
});
|
||||||
|
|
||||||
// Don't refresh list items that are already adapted
|
|
||||||
menus = submenus.add( this.element );
|
menus = submenus.add( this.element );
|
||||||
|
|
||||||
|
// Don't refresh list items that are already adapted
|
||||||
menus.children( ":not(.ui-menu-item):has(a)" )
|
menus.children( ":not(.ui-menu-item):has(a)" )
|
||||||
.addClass( "ui-menu-item" )
|
.addClass( "ui-menu-item" )
|
||||||
.attr( "role", "presentation" )
|
.attr( "role", "presentation" )
|
||||||
@ -315,19 +329,6 @@ $.widget( "ui.menu", {
|
|||||||
// Add aria-disabled attribute to any disabled menu item
|
// Add aria-disabled attribute to any disabled menu item
|
||||||
menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
|
menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
|
||||||
|
|
||||||
submenus.each(function() {
|
|
||||||
var menu = $( this ),
|
|
||||||
item = menu.prev( "a" ),
|
|
||||||
submenuCarat = $( "<span>" )
|
|
||||||
.addClass( "ui-menu-icon ui-icon " + icon )
|
|
||||||
.data( "ui-menu-submenu-carat", true );
|
|
||||||
|
|
||||||
item
|
|
||||||
.attr( "aria-haspopup", "true" )
|
|
||||||
.prepend( submenuCarat );
|
|
||||||
menu.attr( "aria-labelledby", item.attr( "id" ) );
|
|
||||||
});
|
|
||||||
|
|
||||||
// If the active item has been removed, blur the menu
|
// If the active item has been removed, blur the menu
|
||||||
if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
|
if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
|
||||||
this.blur();
|
this.blur();
|
||||||
|
Loading…
Reference in New Issue
Block a user