Skip to content

Commit c88add2

Browse files
committed
Menu: Fix close delay and increase the default delay
1 parent 76c7bf6 commit c88add2

File tree

2 files changed

+39
-31
lines changed

2 files changed

+39
-31
lines changed

tests/unit/menu/menu_events.js

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,16 @@ asyncTest( "handle submenu auto collapse: mouseleave", function() {
9393
setTimeout(function() {
9494
equal( $menu.find( "ul[aria-expanded='true']" ).length, 2, "second submenu expanded" );
9595
$menu.find( "ul[aria-expanded='true']:first" ).trigger( "mouseleave" );
96-
equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
97-
$menu.trigger( "mouseleave" );
98-
equal( $menu.find( "ul[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
99-
start();
100-
}, 400);
101-
}, 200);
96+
setTimeout(function() {
97+
equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
98+
$menu.trigger( "mouseleave" );
99+
setTimeout(function() {
100+
equal( $menu.find( "ul[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
101+
start();
102+
}, 1400);
103+
}, 1050);
104+
}, 700);
105+
}, 350);
102106
});
103107

104108
asyncTest( "handle custom menu item submenu auto collapse: mouseleave", function() {
@@ -112,17 +116,19 @@ asyncTest( "handle custom menu item submenu auto collapse: mouseleave", function
112116
setTimeout(function() {
113117
equal( $menu.find( "div[aria-expanded='true']" ).length, 2, "second submenu expanded" );
114118
$menu.find( "div[aria-expanded='true']:first" ).trigger( "mouseleave" );
115-
equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
116-
117-
$menu.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN });
118-
ok( $menu.find( ".ui-state-active" ).is( "#menu5 :nth-child(7) a" ),
119-
"down keypress selected an item from the first submenu" );
120-
121-
$menu.trigger( "mouseleave" );
122-
equal( $menu.find( "div[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
123-
start();
124-
}, 400);
125-
}, 200);
119+
setTimeout(function() {
120+
equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
121+
$menu.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN });
122+
ok( $menu.find( ".ui-state-active" ).is( "#menu5 :nth-child(7) a" ),
123+
"down keypress selected an item from the first submenu" );
124+
$menu.trigger( "mouseleave" );
125+
setTimeout(function() {
126+
equal( $menu.find( "div[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
127+
start();
128+
}, 1400);
129+
}, 1050);
130+
}, 700);
131+
}, 350);
126132
});
127133

128134

ui/jquery.ui.menu.js

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ var idIncrement = 0;
1818
$.widget( "ui.menu", {
1919
version: "@VERSION",
2020
defaultElement: "<ul>",
21-
delay: 150,
21+
delay: 300,
2222
options: {
2323
menus: "ul",
2424
position: {
@@ -332,12 +332,12 @@ $.widget( "ui.menu", {
332332
},
333333

334334
blur: function( event ) {
335+
clearTimeout( this.timer );
336+
335337
if ( !this.active ) {
336338
return;
337339
}
338340

339-
clearTimeout( this.timer );
340-
341341
this.active.children( "a" ).removeClass( "ui-state-focus" );
342342
this.active = null;
343343

@@ -381,20 +381,22 @@ $.widget( "ui.menu", {
381381
},
382382

383383
collapseAll: function( event, all ) {
384+
clearTimeout( this.timer );
385+
this.timer = this._delay( function() {
386+
// if we were passed an event, look for the submenu that contains the event
387+
var currentMenu = all ? this.element :
388+
$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
384389

385-
// if we were passed an event, look for the submenu that contains the event
386-
var currentMenu = all ? this.element :
387-
$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
388-
389-
// if we found no valid submenu ancestor, use the main menu to close all sub menus anyway
390-
if ( !currentMenu.length ) {
391-
currentMenu = this.element;
392-
}
390+
// if we found no valid submenu ancestor, use the main menu to close all sub menus anyway
391+
if ( !currentMenu.length ) {
392+
currentMenu = this.element;
393+
}
393394

394-
this._close( currentMenu );
395+
this._close( currentMenu );
395396

396-
this.blur( event );
397-
this.activeMenu = currentMenu;
397+
this.blur( event );
398+
this.activeMenu = currentMenu;
399+
}, this.delay);
398400
},
399401

400402
// With no arguments, closes the currently active menu - if nothing is active

0 commit comments

Comments
 (0)