@@ -62,6 +62,8 @@ $.widget( "ui.menu", {
62
62
target . siblings ( ) . children ( ".ui-state-active" ) . removeClass ( "ui-state-active" ) ;
63
63
this . focus ( event , target ) ;
64
64
} ,
65
+ "mouseleave" : "_mouseleave" ,
66
+ "mouseleave .ui-menu" : "_mouseleave" ,
65
67
"mouseout .ui-menu-item" : "blur" ,
66
68
"focus" : function ( event ) {
67
69
this . focus ( event , $ ( event . target ) . children ( ".ui-menu-item:first" ) ) ;
@@ -346,21 +348,30 @@ $.widget( "ui.menu", {
346
348
} ,
347
349
348
350
collapseAll : function ( event ) {
349
- this . element
350
- . find ( "ul" )
351
- . hide ( )
352
- . attr ( "aria-hidden" , "true" )
353
- . attr ( "aria-expanded" , "false" )
354
- . end ( )
355
- . find ( "a.ui-state-active" )
356
- . removeClass ( "ui-state-active" ) ;
351
+ var currentMenu = false ;
352
+ if ( event ) {
353
+ var target = $ ( event . target ) ;
354
+ if ( target . is ( "ui.menu" ) ) {
355
+ currentMenu = target ;
356
+ } else if ( target . closest ( ".ui-menu" ) . length ) {
357
+ currentMenu = target . closest ( ".ui-menu" ) ;
358
+ }
359
+ }
357
360
358
- this . blur ( event ) ;
359
- this . activeMenu = this . element ;
361
+ this . _close ( currentMenu ) ;
362
+
363
+ if ( ! currentMenu ) {
364
+ this . blur ( event ) ;
365
+ this . activeMenu = this . element ;
366
+ }
360
367
} ,
361
368
362
- _close : function ( ) {
363
- this . active . parent ( )
369
+ _close : function ( startMenu ) {
370
+ if ( ! startMenu ) {
371
+ startMenu = this . active ? this . active . parent ( ) : this . element ;
372
+ }
373
+
374
+ startMenu
364
375
. find ( "ul" )
365
376
. hide ( )
366
377
. attr ( "aria-hidden" , "true" )
@@ -373,10 +384,7 @@ $.widget( "ui.menu", {
373
384
collapse : function ( event ) {
374
385
var newItem = this . active && this . active . parents ( "li:not(.ui-menubar-item)" ) . first ( ) ;
375
386
if ( newItem && newItem . length ) {
376
- this . active . parent ( )
377
- . attr ( "aria-hidden" , "true" )
378
- . attr ( "aria-expanded" , "false" )
379
- . hide ( ) ;
387
+ this . _close ( ) ;
380
388
this . focus ( event , newItem ) ;
381
389
return true ;
382
390
}
@@ -486,6 +494,11 @@ $.widget( "ui.menu", {
486
494
return this . element . height ( ) < this . element . prop ( "scrollHeight" ) ;
487
495
} ,
488
496
497
+ _mouseleave : function ( event ) {
498
+ this . collapseAll ( event ) ;
499
+ this . blur ( ) ;
500
+ } ,
501
+
489
502
select : function ( event ) {
490
503
// save active reference before collapseAll triggers blur
491
504
var ui = {
0 commit comments