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