@@ -754,7 +754,7 @@ var // currently active contextMenu trigger
754
754
// hide menu if callback doesn't stop that
755
755
if ( callback . call ( root . $trigger , key , root ) !== false ) {
756
756
root . $menu . trigger ( 'contextmenu:hide' ) ;
757
- } else {
757
+ } else if ( root . $menu . parent ( ) . length ) {
758
758
op . update . call ( root . $trigger , root ) ;
759
759
}
760
760
} ,
@@ -764,9 +764,9 @@ var // currently active contextMenu trigger
764
764
} ,
765
765
766
766
// hide <menu>
767
- hideMenu : function ( e ) {
767
+ hideMenu : function ( e , data ) {
768
768
var root = $ ( this ) . data ( 'contextMenuRoot' ) ;
769
- op . hide . call ( root . $trigger , root ) ;
769
+ op . hide . call ( root . $trigger , root , data && data . force ) ;
770
770
} ,
771
771
// focus <command>
772
772
focusItem : function ( e ) {
@@ -856,14 +856,14 @@ var // currently active contextMenu trigger
856
856
} ) ;
857
857
}
858
858
} ,
859
- hide : function ( opt ) {
859
+ hide : function ( opt , force ) {
860
860
var $this = $ ( this ) ;
861
861
if ( ! opt ) {
862
862
opt = $this . data ( 'contextMenu' ) || { } ;
863
863
}
864
864
865
865
// hide event
866
- if ( opt . events && opt . events . hide . call ( $this , opt ) === false ) {
866
+ if ( ! force && opt . events && opt . events . hide . call ( $this , opt ) === false ) {
867
867
return ;
868
868
}
869
869
@@ -1297,6 +1297,11 @@ $.contextMenu = function(operation, options) {
1297
1297
1298
1298
$ ( '#context-menu-layer, .context-menu-list' ) . remove ( ) ;
1299
1299
} else if ( namespaces [ o . selector ] ) {
1300
+ var $visibleMenu = $ ( '.context-menu-list' ) . filter ( ':visible' ) ;
1301
+ if ( $visibleMenu . length && $visibleMenu . data ( ) . contextMenuRoot . $trigger . is ( o . selector ) ) {
1302
+ $visibleMenu . trigger ( 'contextmenu:hide' , { force : true } ) ;
1303
+ }
1304
+
1300
1305
try {
1301
1306
if ( menus [ namespaces [ o . selector ] ] . $menu ) {
1302
1307
menus [ namespaces [ o . selector ] ] . $menu . remove ( ) ;
0 commit comments