aboutsummaryrefslogtreecommitdiffstats
path: root/ui/jquery.ui.selectmenu.js
diff options
context:
space:
mode:
authorFelix Nagel <info@felixnagel.com>2012-01-26 23:10:35 +0100
committerFelix Nagel <info@felixnagel.com>2012-01-26 23:10:35 +0100
commit827a8cb35ccf0e7a1d5532887c7d5e8c6185df13 (patch)
treedcd5131c2f9fec297b533b2931d8076001767a9f /ui/jquery.ui.selectmenu.js
parent30211901a809a3efc19af208f2bcea61e583c61a (diff)
downloadjquery-ui-827a8cb35ccf0e7a1d5532887c7d5e8c6185df13.tar.gz
jquery-ui-827a8cb35ccf0e7a1d5532887c7d5e8c6185df13.zip
Selectmenu: improved handling of keypress events
Diffstat (limited to 'ui/jquery.ui.selectmenu.js')
-rw-r--r--ui/jquery.ui.selectmenu.js56
1 files changed, 30 insertions, 26 deletions
diff --git a/ui/jquery.ui.selectmenu.js b/ui/jquery.ui.selectmenu.js
index 629f1012e..6cb2c3014 100644
--- a/ui/jquery.ui.selectmenu.js
+++ b/ui/jquery.ui.selectmenu.js
@@ -123,18 +123,10 @@ $.widget( "ui.selectmenu", {
// init menu widget
this.menu.menu({
select: function( event, ui ) {
- var item = ui.item.data( "item.selectmenu" ),
- oldIndex = that.element[0].selectedIndex;
-
- // change native select element
- that.element[0].selectedIndex = item.index;
- that._setSelected();
- that._trigger( "select", event, { item: item } );
-
- if ( item.index != oldIndex ) {
- that._trigger( "change", event, { item: item } );
- }
-
+ var item = ui.item.data( "item.selectmenu" );
+
+ that._select( item, event );
+
if ( that.isOpen ) {
event.preventDefault();
that.close( event, true);
@@ -143,10 +135,15 @@ $.widget( "ui.selectmenu", {
focus: function( event, ui ) {
var item = ui.item.data( "item.selectmenu" );
- if ( that.focus !== undefined && item.index != that.focus ) {
- that._trigger( "focus", event, { item: item } );
- }
- that.focus = item.index;
+ if ( that.focus !== undefined ) {
+ if ( item.index != that.focus ) {
+ that._trigger( "focus", event, { item: item } );
+ }
+ if ( !that.isOpen ) {
+ that._select( item, event );
+ }
+ }
+ that.focus = item.index;
}
})
// change ARIA role
@@ -176,6 +173,9 @@ $.widget( "ui.selectmenu", {
// adjust ARIA
this.menuItems.find( 'a' ).attr( 'role', 'option' );
+
+ // select current item
+ this.menu.menu( "focus", null, this._getSelectedItem() );
this._setSelected();
// set and transfer disabled state
@@ -277,23 +277,14 @@ $.widget( "ui.selectmenu", {
return li.appendTo( ul );
},
- _move: function( direction, event ) {
+ _move: function( direction, event ) {
if ( direction == "first" || direction == "last" ) {
// set focus manually for first or last item
this.menu.menu( "focus", event, this.menuItems[ direction ]() );
} else {
- // if menu is closed we need to focus the element first to indicate correct element
- if ( !this.isOpen ) {
- this.menu.menu( "focus", event, this._getSelectedItem() );
- }
// move to and focus next or prev item
this.menu.menu( direction, event );
}
-
- // select if selectmenu is closed
- if ( !this.isOpen ) {
- this.menu.menu( "select", event );
- }
},
_getSelectedItem: function() {
@@ -367,6 +358,19 @@ $.widget( "ui.selectmenu", {
}
},
+ _select: function( item, event ) {
+ var oldIndex = this.element[0].selectedIndex;
+
+ // change native select element
+ this.element[0].selectedIndex = item.index;
+ this._setSelected();
+ this._trigger( "select", event, { item: item } );
+
+ if ( item.index != oldIndex ) {
+ this._trigger( "change", event, { item: item } );
+ }
+ },
+
_setSelected: function() {
var item = this._getSelectedItem(),
link = item.find("a");