From b02a32f4b3d7a0588949f2961a74d613beeaea48 Mon Sep 17 00:00:00 2001 From: TJ VanToll Date: Fri, 2 Aug 2013 06:51:04 -0400 Subject: [PATCH] Menu: Only set the mouseHandled flag if the event is going to bubble. Fixes #9469: on( "menuselect" ) not firing every time. (cherry picked from commit 484e382259f1c1c56b151a97ddf8a894f94d17ea) --- tests/unit/menu/menu_events.js | 15 +++++++++++++++ ui/jquery.ui.menu.js | 8 ++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/tests/unit/menu/menu_events.js b/tests/unit/menu/menu_events.js index 554c4c516..4b152dcf4 100644 --- a/tests/unit/menu/menu_events.js +++ b/tests/unit/menu/menu_events.js @@ -619,4 +619,19 @@ test( "ensure default is prevented when clicking on anchors in disabled menus ", equal( logOutput(), "click,1,afterclick,disable,enable,3", "Click order not valid." ); }); +test( "#9469: Stopping propagation in a select event should not suppress subsequent select events.", function() { + expect( 1 ); + var element = $( "#menu1" ).menu({ + select: function( event, ui ) { + log(); + event.stopPropagation(); + } + }); + + click( element, "1" ); + click( element, "2" ); + + equal( logOutput(), "1,2", "Both select events were not triggered." ); +}); + })( jQuery ); diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index b2ad76566..93309f7f1 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -75,9 +75,13 @@ $.widget( "ui.menu", { "click .ui-menu-item:has(a)": function( event ) { var target = $( event.target ).closest( ".ui-menu-item" ); if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) { - this.mouseHandled = true; - this.select( event ); + + // Only set the mouseHandled flag if the event will bubble, see #9469. + if ( !event.isPropagationStopped() ) { + this.mouseHandled = true; + } + // Open submenu on click if ( target.has( ".ui-menu" ).length ) { this.expand( event ); -- 2.39.5