mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-10-05 01:44:18 +00:00
Menu: Prevent navigating to disabled menu items with the keyboard.
This commit is contained in:
parent
30713ade36
commit
87dc9ce24a
@ -74,9 +74,9 @@
|
||||
</ul>
|
||||
|
||||
<ul id="menu2">
|
||||
<li><a href="#">Aberdeen</a></li>
|
||||
<li class="ui-state-disabled"><a href="#">Aberdeen</a></li>
|
||||
<li><a href="#">Ada</a></li>
|
||||
<li class="ui-state-disabled"><a href="#">Adamsville</a></li>
|
||||
<li><a href="#">Adamsville</a></li>
|
||||
<li><a href="#">Addyston</a></li>
|
||||
<li>
|
||||
<a href="#">Delphi</a>
|
||||
@ -109,6 +109,7 @@
|
||||
<li><a href="#">Perch</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="ui-state-disabled"><a href="#">Amesville</a></li>
|
||||
</ul>
|
||||
|
||||
<ul id="menu3">
|
||||
|
41
ui/jquery.ui.menu.js
vendored
41
ui/jquery.ui.menu.js
vendored
@ -77,7 +77,7 @@ $.widget( "ui.menu", {
|
||||
"mouseleave": "collapseAll",
|
||||
"mouseleave .ui-menu": "collapseAll",
|
||||
"focus": function( event ) {
|
||||
var firstItem = this.element.children( ".ui-menu-item" ).eq( 0 );
|
||||
var firstItem = this.element.children( ".ui-menu-item" ).not( ".ui-state-disabled" ).eq( 0 );
|
||||
if ( this._hasScroll() && !this.active ) {
|
||||
var menu = this.element;
|
||||
menu.children().each( function() {
|
||||
@ -417,7 +417,7 @@ $.widget( "ui.menu", {
|
||||
},
|
||||
|
||||
expand: function( event ) {
|
||||
var newItem = this.active && this.active.children( ".ui-menu " ).children( ".ui-menu-item" ).first();
|
||||
var newItem = this.active && this.active.children( ".ui-menu " ).children( ".ui-menu-item" ).not( ".ui-state-disabled" ).first();
|
||||
|
||||
if ( newItem && newItem.length ) {
|
||||
this._open( newItem.parent() );
|
||||
@ -447,28 +447,27 @@ $.widget( "ui.menu", {
|
||||
},
|
||||
|
||||
_move: function( direction, filter, event ) {
|
||||
if ( !this.active ) {
|
||||
this.focus( event, this.activeMenu.children( ".ui-menu-item" )[ filter ]() );
|
||||
return;
|
||||
}
|
||||
|
||||
var next;
|
||||
if ( direction === "first" || direction === "last" ) {
|
||||
next = this.active[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ).eq( -1 );
|
||||
} else {
|
||||
next = this.active[ direction + "All" ]( ".ui-menu-item" ).eq( 0 );
|
||||
if ( this.active ) {
|
||||
if ( direction === "first" || direction === "last" ) {
|
||||
next = this.active[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ).not( ".ui-state-disabled" ).eq( -1 );
|
||||
} else {
|
||||
next = this.active[ direction + "All" ]( ".ui-menu-item" ).not( ".ui-state-disabled" ).eq( 0 );
|
||||
}
|
||||
}
|
||||
if ( !next.length || !this.active ) {
|
||||
next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
|
||||
}
|
||||
|
||||
if ( next.length ) {
|
||||
this.focus( event, next );
|
||||
} else {
|
||||
this.focus( event, this.activeMenu.children( ".ui-menu-item" )[ filter ]() );
|
||||
this.focus( event, next );
|
||||
if ( next.is( ".ui-state-disabled" ) ) {
|
||||
this._move( direction, filter, event );
|
||||
}
|
||||
},
|
||||
|
||||
nextPage: function( event ) {
|
||||
if ( !this.active ) {
|
||||
this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
|
||||
this._move( "next", "first", event );
|
||||
return;
|
||||
}
|
||||
if ( this.isLastItem() ) {
|
||||
@ -478,21 +477,21 @@ $.widget( "ui.menu", {
|
||||
var base = this.active.offset().top,
|
||||
height = this.element.height(),
|
||||
result;
|
||||
this.active.nextAll( ".ui-menu-item" ).each( function() {
|
||||
this.active.nextAll( ".ui-menu-item" ).not( ".ui-state-disabled" ).each( function() {
|
||||
result = $( this );
|
||||
return $( this ).offset().top - base - height < 0;
|
||||
});
|
||||
|
||||
this.focus( event, result );
|
||||
} else {
|
||||
this.focus( event, this.activeMenu.children( ".ui-menu-item" )
|
||||
this.focus( event, this.activeMenu.children( ".ui-menu-item" ).not( ".ui-state-disabled" )
|
||||
[ !this.active ? "first" : "last" ]() );
|
||||
}
|
||||
},
|
||||
|
||||
previousPage: function( event ) {
|
||||
if ( !this.active ) {
|
||||
this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
|
||||
this._move( "next", "first", event );
|
||||
return;
|
||||
}
|
||||
if ( this.isFirstItem() ) {
|
||||
@ -502,14 +501,14 @@ $.widget( "ui.menu", {
|
||||
var base = this.active.offset().top,
|
||||
height = this.element.height(),
|
||||
result;
|
||||
this.active.prevAll( ".ui-menu-item" ).each( function() {
|
||||
this.active.prevAll( ".ui-menu-item" ).not( ".ui-state-disabled" ).each( function() {
|
||||
result = $( this );
|
||||
return $(this).offset().top - base + height > 0;
|
||||
});
|
||||
|
||||
this.focus( event, result );
|
||||
} else {
|
||||
this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
|
||||
this.focus( event, this.activeMenu.children( ".ui-menu-item" ).not( ".ui-state-disabled" ).first() );
|
||||
}
|
||||
},
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user