Skip to content

Menu: Don't reset active element until after triggering blur event #1696

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Menu: Don't reset active element until after triggering blur event
This ensures that `ui.item` actually exists in the `blur` event.

Fixes #14945
  • Loading branch information
scottgonzalez committed Apr 12, 2016
commit e5026655e6a49ac34e63659e821589a355dfed77
16 changes: 10 additions & 6 deletions tests/unit/menu/events.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,20 +48,22 @@ test( "handle click on custom item menu", function() {
} );

asyncTest( "handle blur", function() {
expect( 1 );
expect( 2 );
var blurHandled = false,
index = 1,
element = $( "#menu1" ).menu( {
blur: function( event ) {
blur: function( event, ui ) {

// Ignore duplicate blur event fired by IE
if ( !blurHandled ) {
blurHandled = true;
equal( event.type, "menublur", "blur event.type is 'menublur'" );
strictEqual( ui.item[ 0 ], element.children()[ index ], "ui.item" );
}
}
} );

click( element, "1" );
click( element, index );
setTimeout( function() {
element.trigger( "blur" );
setTimeout( function() {
Expand All @@ -71,20 +73,22 @@ asyncTest( "handle blur", function() {
} );

asyncTest( "handle blur via click outside", function() {
expect( 1 );
expect( 2 );
var blurHandled = false,
index = 1,
element = $( "#menu1" ).menu( {
blur: function( event ) {
blur: function( event, ui ) {

// Ignore duplicate blur event fired by IE
if ( !blurHandled ) {
blurHandled = true;
equal( event.type, "menublur", "blur event.type is 'menublur'" );
strictEqual( ui.item[ 0 ], element.children()[ index ], "ui.item" );
}
}
} );

click( element, "1" );
click( element, index );
setTimeout( function() {
$( "<a>", { id: "remove" } ).appendTo( "body" ).trigger( "click" );
setTimeout( function() {
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -434,9 +434,9 @@ return $.widget( "ui.menu", {

this._removeClass( this.active.children( ".ui-menu-item-wrapper" ),
null, "ui-state-active" );
this.active = null;

this._trigger( "blur", event, { item: this.active } );
this.active = null;
},

_startOpening: function( submenu ) {
Expand Down